heiltor
Goto Top

Dateinamen und Artikelanzahl in eine Datei ausgeben

Hallo an alle! Ich bin hier neu, es ist mein erster Schrei nach Hilfe. Ich fange gerade an, VBA für die Arbeit zu lernen. Leider habe ich niemanden der mir helfen kann, wenn ich nicht weiter komme. Bei Excel selber bin ich sehr gut und helfe gerne meinen Kollegen. Bei VBA brauche ich noch so viel Hilfe!
Wir bekommen demnächst 39 Dateien, die z.B. Auflistung von Artikeln beinhalten (ich glaube die Artikelnummer steht gleich in der Spalte A). Ich möchte in einer anderen Datei alle Dateinamen und die entsprechende Artikelanzahl bekommen. Erste Spalte Dateiname (ohne den Pfad), nächste Spalte Anzahl von Artikeln. (Jede Datei wird bestimmt eine Überschriftszeile haben, falls man die Zeilen zählen soll) Die Dateien würde ich in einem bestimmten Ordner speichern. Dort kann auch die Ergebnisdatei gespeichert werden. Brauche ich dafür ein Makro.

Content-Key: 296045

Url: https://administrator.de/contentid/296045

Printed on: April 19, 2024 at 15:04 o'clock

Member: colinardo
colinardo Feb 14, 2016 updated at 15:49:15 (UTC)
Goto Top
Hallo @Heiltor, Willkommen auf Administrator.de!
Kein Problem und schnell gemacht.

Speichere den Code in einem Excel-Sheet und speichere es mit der Endung *.xlsm. Dann packst du alle deine *.xlsx Dateien deren Artikel du in Spalte A zählen willst in den selben Ordner. Dann kannst du den Code im Makrosheet ausführen.
Weitere Kommentare findest du im Code für die essentiellen Codezeilen):
Sub ListAndCountProducts()
    Dim strPath As String, ws As Worksheet, cFile As String, lngArtikel As Long
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    'Pfad in dem die Dateien liegen (Default ist hier der Pfad in dem diese Datei liegt)  
    strPath = ThisWorkbook.Path
    'Alle *.xlsx Dateien suchen  
    cFile = Dir(strPath & "\*.xlsx")  
    With ActiveSheet
        'Überschriften setzen  
        With .Range("A1:B1")  
            .Value = Array("Dateiname", "Artikel")  
            .Font.Bold = True
        End With
        'Jede *.xlsx Datei im aktuellen Verzeichnis öffnen und Artikel zählen  
        Do While cFile <> ""  
            'Datei öffnen und erstes Sheet referenzieren  
            Set ws = GetObject(strPath & "\" & cFile).Sheets(1)  
            'Anzahl an Artikeln ermitteln (Überschrift abziehen)  
            lngArtikel = (ws.Cells(Rows.Count, "A").End(xlUp).Row) - 1  
            'Dateiname und Anzahl Artikel in nächte freie Zeile schreiben  
            .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0).Resize(1, 2).Value = Array(cFile, lngArtikel)  
            'Datei wieder schließen  
            ws.Parent.Close False
            'nächste Datei holen  
            cFile = Dir
        Loop
        'Spaltenbreiten der Liste anpassen  
        .Range("A:B").EntireColumn.AutoFit  
    End With
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    ' Fertig  
    MsgBox "Alle Dateien wurden eingelesen", vbInformation  
End Sub
Grüße Uwe
Member: Heiltor
Heiltor Feb 14, 2016 at 19:00:52 (UTC)
Goto Top
Vielen lieben Dank! Bin begeistert! Sonst jubeln die Leute wenn ich ihnen etwas im Excel mit Formel einrichte. Jetzt sitze ich selber da und staune.
Mit diesen Dateien wird man weitere Sachen machen müssen. Ich hoffe ich kann gut erklären und bekomme auch wieder (irgendwann) Hilfe. (es ist nicht unbedingt für morgen!)
Jede von den 39 Dateien hat einen Namen (Ges.Nr.) und drin stehen die Artikel, die die Ges. im Sortiment hat. Fürs Endergebnis braucht man zuerst die Filialen die zu jeweiligen Ges. gehören! Dann sollen in jeder von den Dateien (z.B. in einem neuenTabellenblatt) in Spalte A die Filialen der entsprechenden Ges. untereinander stehen und daneben die Artikelnummern aus dieser Datei. Sprich zuerst die erste Filiale so viel mal wieviele Artikel es gibt, daneben die Artikel untereinander, dann nächste Filiale und wieder daneben die Artikel. Eine Stammdatei mit den Ges. und dazugehörenden Filialen gibt es. Diese kann woanders gespeichert werden, oder auch im gleichen Ordner wie das Makro und die .xlsx Dateien. Das heißt das Makro öffnet die erste Datei, schaut nach dem Namen der Datei (Ges.-Nr.) und dann filtert in der Stammdatei in der Spalte B diese Nummer (muss aber die Nummer erkennen können, weil in dem ersten Makro von dir kommt als Name z.B. 202.xlsx) Nach dem Filtern erscheinen in der Spalte A die entsprechenden Filial.Nr.
Ob die Dateien am Ende in eine Datei zusammenkopiert werden oder nicht, weiß ich noch nicht. Aber das soll schon kein Problem für mich sein.
Die 39 Dateien dürfen mit den Änderungen gespeichert werden.
Member: BirdyB
BirdyB Feb 14, 2016 at 19:04:42 (UTC)
Goto Top
Hallo Heiltor,

wenn du diese ganzen Daten in unterschiedlichen Zusammenstellungen öfter benötigst, solltest du vielleicht mal über eine Datenbank nachdenken...
Per SQL bekommst du deine Daten dann sehr schnell in vielen Variationen zusammengestellt, wie du es benötigst.

Beste Grüße!


Berthold
Member: Heiltor
Heiltor Feb 14, 2016 at 19:24:03 (UTC)
Goto Top
Das ist wahr. Kann ich mir sehr gut vorstellen. Leider habe ich früher Daten aus einer Datenbank mit Microsoft Acces nur runtergeladen. Keine Ahnung wie ich die Dateien in eine Datenbank hochladen soll. Ich mache es gerne diesmal mit Makro, weil ich es lerne möchte. Wir arbeiten sehr viel mit Excel, und obwohl ich keine Probleme mit Formel, Pivots usw. habe, mit Makro gehts manchmal schneller. Und vor allem sicherer, wenn du es Leute machen lässt, die einfach kein Händchen für Excel haben.
Member: colinardo
colinardo Feb 15, 2016 updated at 11:18:50 (UTC)
Goto Top
Hallo Heiltor,
Mit diesen Dateien wird man weitere Sachen machen müssen.
ja ja, kaum reicht man einem den Finger nehmen sie immer gleich die ganze Hand face-wink, wie immer hier ...

Eine Frage: In den Dateien der Gesellschaften, wo steht dort die Nummer der Filiale und die Artikel (Artikel in Spalte A und Filialnummer in Spalte B ?). Ich interpretiere also das in jedem Sheet die Artikel aller Filialen dieser Gesellschaft untereinander aufgelistet sind, ist das Korrekt?

Am einfachsten du postest einfach mal ein Demo-Sheet, oder nutzt die vielfältigen Formatierungsmöglichkeiten hier im Forum. Merci.

Aber der Grund warum du die Filialen und deren Artikel erneut auflisten willst erschließt sich mir nicht, wenn sie doch schon im ersten Sheet stehen und sich alle Artikel einer Filiale mit dem AutoFilter komfortabel auswählen lassen. Außerdem geht sowas auch mit einer Matrix-Formel face-wink
Member: Heiltor
Heiltor Feb 15, 2016 updated at 16:27:41 (UTC)
Goto Top
Es geht darum, dass es 39 Dateien sind, jede für eine Ges., dort stehen aber nicht die Filialen. Man müsste also jede Datei öffnen, die entsprechenden Filialnummer aus der Stammdatei holen, und so die Daten zusammenkopieren, dass für jede Filiale dieser Ges. (Spalte A) alle Artikel in der Spalte B stehen. Sprich wenn es 300 Artikel im Sortiment gibt, dann muss jede Filiale 300 mal untereinander stehen, jedesmal mit anderem der 300 Artikel nebendran. Die Matrixformel kenne ich. Es geht um die Menge der Dateien, in jeder muss das gleiche gemacht werden. Am Ende wird die Datei (oder Dateien) in eine Datenbank hochgeladen. Es muss für jede Filiale ein Datensatz mit dem in der Filiale vorkommenden Artikel geben.
Und ja, in jeder Ges.-Datei stehen ursprünglich Artikel die in jeder Filiale dieser Ges. vorkommen.
Member: colinardo
colinardo Feb 15, 2016 updated at 16:56:13 (UTC)
Goto Top
Zitat von @Heiltor:

Es geht darum, dass es 39 Dateien sind, jede für eine Ges., dort stehen aber nicht die Filialen.
Das ist schon klar, die stehen in der Stammdatei, aber wie sind die Daten in den Sheets der Gesellschaften organisiert, also nicht die neu zu schreibenden Daten sondern die vorhandenen ? das war meine eigentlich Frage. Stehen dort die Artikel in Spalte A und die Filialen in Spalte B, oder umgekehrt?

Na ja egal, das kannst du ja in der unten verlinkten Demo selber anpassen.

Hier mal ein Demo-Package nach deiner Beschreibung
demo_package_296045.zip

Benötigst du noch mehr Hilfestellung kannst du mich gerne via PM kontaktieren. Dieser Support ist dann jedoch nicht mehr kostenlos.

Viel Erfolg
Grüße Uwe

Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
Member: Heiltor
Heiltor Feb 15, 2016 at 17:02:42 (UTC)
Goto Top
Vielen Dank.
Im Ordner Daten sind zwei Ges.-Dateien, aber warum stehen da schon die Filialen? Das ist das Problem. Wenn die Dateien kommen werden, werden dort nur die Artikel in der Spalte A (oder so) stehen, aber keine Filialen, man weiß nur aus welcher Ges. die Datei kam. Anhand von der Ges.-Nr. (als Name der Datei) muss man erst die dazugehörigen Filialen aus der Stammdatei (und zwar alle) holen. So was, dass es keine Artikel in einer Filiale gibt, gibt es nicht.
Filiale Artikel
555 123
555 234
555 456
777 567
777 678
777 789
888 789
888 890
999 Keine Artikel

Gruß
Member: colinardo
colinardo Feb 15, 2016 updated at 17:13:25 (UTC)
Goto Top
Im Ordner Daten sind zwei Ges.-Dateien, aber warum stehen da schon die Filialen? Das ist das Problem.
Versteh dich leider immer noch nicht. Naja man hätte auch einfach mal ein zwei Demo-Sheets posten können dann wäre das Missverständnis erledigt gewesen..face-sad aber anhand der Code-Kommentare für jede Zeile kannst du es ja mal nachvollziehen und mit dem Debugger Schritt für Schritt durchlaufen lassen, dann kannst du es dir anpassen. Du willst ja was davon lernen, also studiere die im Code angewendeten Techniken einfach erst mal.

Als Ergänzung die Referenzen zu den verwendeten Funktionen:
back-to-topVBA/VBS/WSH/Office Developer Referenzen

Grüße und viel Erfolg beim Lernen
Uwe
Member: Heiltor
Heiltor Feb 15, 2016 at 17:28:59 (UTC)
Goto Top
Artikel-Nr. Warengruppe andere Eigenschaften
123
234
456
567
678
789
789
890
So sieht eine Datei aus. Mehrere Spalten, mich interessiert die Artikelnummer. Die Filialnummern stehen hier gar nicht! Die Datei hat den Namen der Ges. Die Filialen muss man erst aus der Stammdatei holen, und zwar alle, nicht nur 3 von 4. Du hast in der Ursprungsdatei der Ges. 5678 3 Filialen stehen. Aber in der Stammdatei gibt es für die Ges. 5678 4 Filialen. Und so am Ende stand es für eine Filiale dass es keine Artikel dort gibt. Einfach die Spalte Filialnummer (in der Ges.-Datei mit den Artikeln) weglassen. Die Artikel die in der Ges.-Datei stehen müssen mit den Filialen der entsprechenden Ges. aus der Stammdatei gepaart werden. Die Stammdatei von Dir ist korrekt. Hier steht die Ges-Nr. und die Filialen. Please!
Member: colinardo
colinardo Feb 15, 2016 updated at 17:34:11 (UTC)
Goto Top
Die Artikel die in der Ges.-Datei stehen müssen mit den Filialen der entsprechenden Ges. aus der Stammdatei gepaart werden.
Wird ja im Makro gemacht. Also bitte wenn du was lernen willst dann musst du auch was dafür tun, von selbst kommt da nichts, sorry. Das ist hier ja kein Wunschkonzert.
Und so am Ende stand es für eine Filiale dass es keine Artikel dort gibt
Das ist ja auch laut den Demo-Artikeldaten korrekt face-wink. Ein Fall den man abfangen muss.

Ciao.
Member: Heiltor
Heiltor Feb 15, 2016 at 17:43:26 (UTC)
Goto Top
Wenn die Datei kommt, gibt es die Spalte mit Filiale nicht, aber Du hast sie schon am Anfang eingefügt, so wie unten. Warum steht sie bei Dir schon da? Wenn ich sie lösche weiß Makro nicht welche Filialen es sind. Und darum geht es. Die Filialen muss das Makro erst selber finden, sonst braucht man die Stammdatei nicht. Die Datei heißt 5678. Diese Nr. muss das Makro in der Stammdatei suchen, und für jede Ges. 5678 die dazugehörigen Filialen mit jedem Artikel paaren.
Artikel Filiale
123 111
234 222
456 111
567 222
678 111
789 111
789 444
890 444
Member: colinardo
colinardo Feb 15, 2016 updated at 18:48:44 (UTC)
Goto Top
Die Artikel die in der Ges.-Datei stehen müssen mit den Filialen der entsprechenden Ges. aus der Stammdatei gepaart werden
Aber anhand welchen Merkmals ?????? Wenn ich 4 Filialen in einer Gesellschaft habe zu welcher soll dann ein Artikel zugeordnet werden???
In meinem Code siehst du wie in ein Dictionary die Stammdaten eingelesen werden und zwar für jede Gesellschaft werden alle Filialen zugeordnet. Jetzt fehlt ja der Zusammenhang der Artikel zu den Filialen, alsomalles ziemlich wirr beschrieben.
Warum steht sie bei Dir schon da?
Weil ich diese Information zum Zeitpunkt der Erstellung noch nicht hatte, das hatte ich ja extra gefragt !

Also letzte Chance von meiner Seite: Stell deine Sheets zusammen im Ursprungszustand und im Sollzustand und stell sie zum Download dann sind Fehlinterpretationen und fehlende Informationen ausgeschlossen. Ich mach das für dich ja auch, und etwas mehr Mühe schadet hier nicht wenn du hier schon kostenlose Hilfe bekommst face-sad , ansonsten ist hier für mich Zappenduster in diesem Thread.

Bedenke immer das wir hier nur mit den Informationen arbeiten können die du uns lieferst und wenn da halt essentielle Teile fehlen die wir hier nicht sehen können, klappt das nicht.

Also DANKE für eine eindeutige und unmissverständliche Beschreibung.

Schönen Abend und bis morgen.