Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Code Modifikation

VBA Code Modifikation
19.01.2023 23:04:51
Sebastian
Hallo zusammen,
ich nutze folgenden Code, um aus einem Ordner alle Files zeilenweise in einer Exceldatei in Spalte A zu listen.
Wie und wo, muss ich den Code abändern, sodass ich zusätzlich zum Dateinamen aus der jeweiligen Datei aus dem Blatt "Multi" (in allen Files vorhanden) den Bereich A2:AA2 neben dem jeweiligen Dateinamen ab Spalte B zu ergänzen?
Sub DateienZusammenstellen()
Dim strOrdner As String
Dim strDatei As String
Dim lngZeile As Long
With Tabelle1
'folgender Befehl bereinigt die Tabelle (bis 500 Zeilen) (ab Zeile 4)
.Range("B4:Y500").ClearContents
lngZeile = 4
'Datei Auswertung Multi-Projekt Report liegt im gleichen Ordner wie die Berichte
strOrdner = ThisWorkbook.Path
'Es werden alle Dateien mit der Datei-Endung xlsm verarbeitet
strDatei = Dir(strOrdner & "\*.xlsm")
'Schleife: Es werden alle Dateien Dateien im Ordner gelistet
Do While strDatei > ""
.Cells(lngZeile, 2).Value = strDatei
lngZeile = lngZeile + 1
strDatei = Dir
Loop
End With
End Sub
Wäre super, wenn mir einer helfen könnte - ich breche mir mit Google seit einigen Tagen einen ab und komme irgendwie nicht weiter...
Gruß Sebastian

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code Modifikation
20.01.2023 06:29:24
ralf_b
wonach suchst du denn in google ,das du keine antworten findest?
wo du den code modifizieren musst steht ja schon dort. Vom lgischen Ablauf her: wenn du den Dateinamen herausgefunden hast und ihn in die Tabelle schreibst. .Cells(lngZeile, 2).Value = strDatei nach dieser Zeile
Was dir fehlt ist das Öffnen der Datei und die Referenz auf die Range("A2:AA2")
du könntest das als Hausaufgabe nehmen. "Datei öffnen und Wert aus Zellbreich lesen"
AW: VBA Code Modifikation
20.01.2023 07:19:59
Sebastian
Guten Morgen Ralf,
das Problem dabei ist, dass ich mit VBA eigentlich nix am Hut habe. Ich habe die letzten Tage abendfüllend, Fachbücher, Foren und Youtube-Step-by-Step Videos verschlungen und bin trotzdem nicht auf eine grünen Zweig gekommen. Wahrscheinlich habe ich die falschen Fragen gestellt. Für definierte Quellen (Dateien) mit nur einem Tabellenblatt habe ich ne Menge gefunden und das hat auch meist geklappt - für dynamische Quellen, mit mehreren Tabellenblättern und zum Auslesen aus einem bestimmten Tabellenblatt wurde es dünn - habe mich trotzdem versucht und folgendes ist dabei raus gekommen:
Sub StatusAuslesen()
Dim strOrdner As String
Dim lngZeile As Long, lngZeileMax As Long
Dim lngZMax As Long, IngZeileFrei As Long
Dim wkbQuelle As Workbooks
With Tabelle1
    'Datei Auswertung Multi-Projekt Report liegt im gleichen Ordner wie die Berichte
    strOrdner = ThisWorkbook.Path
    'erste Bearbeitungszeile
    lngZeile = 4
    'Zählen der Zeilen von letzter Zeile zu Zeile 4 um die Anzahl der Schleifen zu bestimmen
    lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
    
    For lngZeile = 4 To lngZeileMax
    
    'Excel Quelle öffnen -> String Quellordner + Dateiname aus Spalte A
    Set wbkQuelle = Workbooks.Open(strOrdner & "\" & .Cells(lngZeile, 1).Value)
    '.Cells(lngZeile, 2).Value =
    
        With Worksheets("Multi")
        
    
            lngZMax = .Cells(.Rows.Count, 1).End(xlUp).Row
            lngZeileFrei = Tabelle1.Cells(Tabelle1.Rows.Count, 1).End(xlUp).Row + 1
            .Range(.Cells(3, 1), .Cells(lngZMax, 29)).Copy
            Destination:=Worksheets(1).Cells(lngZeileFrei, 1)
        
        End With
        wbkQuelle.Close savechanges:=False
    
    Next lngZeile
End With
In nachfolgender Zeile schmiert mir die Sache mit der Meldung "Syntaxfehler" ab...
Destination:=Worksheets(1).Cells(lngZeileFrei, 1)
Für nen Schubs wäre ich dankbar...

Gruß Sebastian
Anzeige
AW: VBA Code Modifikation
20.01.2023 08:29:23
UweD
Hallo
das gehört noch hinter den .copy Befehl
entweder dort hinsetzen oder am Ende [Leerzeichen] [Unterstrich] [Leerzeichen] einfügen
.Range(.Cells(3, 1), .Cells(lngZMax, 29)).Copy _ 
                Destination:=Worksheets(1).Cells(lngZeileFrei, 1)
LG UweD
AW: VBA Code Modifikation
20.01.2023 12:50:23
Sebastian
Danke Uwe, das war hilfreich.
Makro läuft durch - trägt noch nichts ein, wahrscheinlich habe ich in der Range irgendwo nen Wurm drin, versuche das erstmal alleine zu verstehen.
Grüße und schönes Wochenende
AW: VBA Code Modifikation
20.01.2023 13:52:17
UweD
Hallo
1) du hast viele Schreibfehler in den Variablennamen
wkbQuelle &LT&GT wbkQuelle
IngZeileFrei &LT&GT lngZeileFrei ( großes i und kleines L )
Dazu ein Tipp: schreibe in die Erste Zeile "Option Explicit" (Dauerhaft aktivierbar in den VBE Optionen)
Dabei werden die Variablenname dann gegen die DIM geprüft und Fehler fallen auf.
2) du musst genau referenzieren, welche Dateien und Blätter du meinst.
ungeprüft...

Option Explicit
Sub StatusAuslesen()
    Dim strOrdner As String
    Dim lngZeile As Long, lngZeileMax As Long, lngZ as long
    Dim lngZMax As Long, lngZeileFrei As Long
    Dim wkbQuelle As Workbook, wkbZiel As Workbook, wshZiel As Worksheet
        
    Set wkbZiel = ThisWorkbook
    Set wshZiel = wkbZiel.Sheets("Tabelle1")
    
    'Datei Auswertung Multi-Projekt Report liegt im gleichen Ordner wie die Berichte
    strOrdner = wkbZiel.Path
    'erste Bearbeitungszeile
    lngZeile = 4
    With wshZiel
    
        'Zählen der Zeilen von letzter Zeile zu Zeile 4 um die Anzahl der Schleifen zu bestimmen
        lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
    End With
     
    For lngZ = lngZeile To lngZeileMax
    
        'Excel Quelle öffnen -> String Quellordner + Dateiname aus Spalte A
        Set wkbQuelle = Workbooks.Open(strOrdner & "\" & wshZiel.Cells(lngZeile, 1).Value)
        '.Cells(lngZeile, 2).Value =
    
        With wkbQuelle.Worksheets("Multi")
        
    
            lngZMax = .Cells(.Rows.Count, 1).End(xlUp).Row
            lngZeileFrei = wshZiel.Cells(wshZiel.Rows.Count, 1).End(xlUp).Row + 1
            .Range(.Cells(3, 1), .Cells(lngZMax, 29)).Copy _
               Destination:=wshZiel.Cells(lngZeileFrei, 1)
        
        End With
        wkbQuelle.Close savechanges:=False
    
    Next lngZ
 
 End Sub
LG UweD
Anzeige
AW: VBA Code Modifikation
20.01.2023 17:30:57
Yal
Moin!
inspiriert vom Uwes Code, habe ich mich an der Übung rangemacht, minimalistisch zu sein:
Sub StatusAuslesen()
Dim Z As Range
        
    With ThisWorkbook.Sheets("Tabelle1")
        For Each Z In Intersect(.Range("A4:A999999"), .UsedRange)
            With Workbooks.Open(ThisWorkbook.Path & "\" & Z.Value)
                .Worksheets("Multi").Range("A2:AA2").Copy
                Z.Offset(0, 1).PasteSpecial xlValue
                .Close savechanges:=False
            End With
        Next
    End With
End Sub
Die einzige Unterschied ist, dass das Ergebnis rechts des Dateinamen abgelegt wird. Sonst ist es dieselbe Vorgehensweise.
Man muss davon ausgehen, dass alle Dateien in der Spalte A geöffnet werden können. Sonst wirft es Fehler, die hier nicht abgefangen werden.
VG
Yal
Anzeige
AW: VBA Code Modifikation
22.01.2023 14:24:13
Sebastian
Ich arbeite mit 2 Beispieldateien:
Zeile 2 - Überschriften
Zelle A3 - Beispiel 1 (Quelle)
Zelle A4 - Beispiel 2 (Quelle)
@ Uwe: Der Code mit deiner Hilfe zieht die korrekten Daten für die Beispieldatei in A3 - schreibt diese in die Zeile 5 - wie muss der Code geändert werden, dass die Daten in die identische Zeile geschrieben werden? Und es wird der Inhalt der Beispieldatei in A4 nicht gezogen. Was müsste dabei noch eingestellt werden, sodass alle Daten gelesen und auch geschrieben werden und nicht nur die erste...
@Yal: Wie du schreibst, wird es mit deiner Variante in die gleiche Zeile gezogen - jedoch wird nicht aus den Quellen der Bereich A2:A26 gezogen sondern aus der Überschrift in der gleichen Datei.
Leider reicht mein Kenntnisstand noch nicht aus - ich bin weiterhin auf Hilfe angewiesen...
Gruß Sebastian
Anzeige
AW: VBA Code Modifikation
22.01.2023 14:56:10
Yal
Hallo Sebastian,
in deiner Frage war nicht die Rede von A2:A26 sondern von A2:AA2.
Wenn Du eines vorab verstehen muss, bevor Du in die Welt der Programmiererei eintauchen möchtest: Computer lesen keine Gedanken (und ich auch nicht). Hier wird Genauigkeit erwartet.
Schau dir den Code an, lese den Code, auf Deutsch und laut. Dann wirst du merken, dass es kein Hexenwerk ist. Wenn Du etwas nicht kennst, wie z.B. .Copy, lege den Cursor drauf und Druck Strg+F1. Lese die Online-Hilfe (am Anfang genau. Irgendwann kannst du dir erlauben, es weiter zu lesen) und schau dir die Beispiel genau an.
Ich habe Verständnis, dass Du noch nicht so weit bist. Geholfen wird es dir, keine Frage. Aber Du musst dir selbst so weit bringen, dass Du mit deinem minimalistischen Code-Schnipsel zurecht finden kannst. Sonst können wir nicht weiter.
Ich hoffe, mein freundliche Anstupser war dir nicht zu heftig ;-)
VG
Yal
Anzeige
AW: VBA Code Modifikation
22.01.2023 20:34:30
Sebastian
@ Yal,
nein – ist nicht zu heftig. Passt schon!
Bin über jede Hilfe dankbar und versuche es auch, ich muss mir nur jeden einzelnen Codeschnipsel googeln, um den Zusammenhang zu verstehen
War im letzen Post ein Fehler. Quelle bleibt als Zeile und keine Spalte. Aber dynamische Anzahl externer Dateien mir einer Zeile…
Ich übe mich weiter
Grüße
AW: VBA Code Modifikation
23.01.2023 07:26:25
Sebastian
@all: Läuft. Danke.
AW: VBA Code Modifikation
24.01.2023 08:58:06
Sebastian
@all - so langsam finde ich nen Zugang zur Thematik...
Eine frage bleibt - nach dem Einfügen kommen Meldungen, dass die Arbeitsmappe Verknüpfungen enthält - kann ich diese Meldung mit "Aktualisieren" automatisieren?
Bisher habe ich nur etwas zum Unterdrücken der Meldung gefunden...
Gruß Sebastian
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige