Zeilenindex um 1 erhöhen
10.02.2022 15:56:42
Patrick
ich versuche gerade mein erstes eigenes Makro in VBA zu programmieren. Ich bin absoluter VBA-Laie und hangele mich einfach an kleineren Dokus und Codeschnipseln entlang. Der Code ist sicherlich alles andere als sauber und performant, aber er funktioniert soweit erst einmal für mich.
Worum geht es bei dem Ganzen? In meiner Exceltabelle stehen in Spalte A Ausschnitte aus Dateinamen aus einem bestimmten Verzeichnis. In Spalte E und F stehen verschiedene Zielverzeichnisse. Nun soll im Quellverzeichnis nach Dateien mit dem String aus Spalte A gesucht werden und in die Zielverzeichnisse aus Spalte E und F kopiert werden. Das funktioniert auch ganz gut.
Mein Problem ist nun folgendes: Das Ganze muss per Schleife durchlaufen werden, damit alle Werte aus Spalte A geprüft werden. Das funktioniert auch. Ich prüfe jetzt aber auch nach den Werten in Spalte E und F, allerdings stand jetzt nur für die erste Datenzeile. Der Index soll sich aber natürlich bei jedem Schleifenlauf um 1 erhöhen, damit der Wert aus der richtigen Zeile geprüft wird. Wie stelle ich das an?
Konkret geht es um empfaenger1 und empfaenger2. empfaenger1 müsste also nach dem ersten Durchlauf auf Cells(5,5) gesetzt werden und solange erhöht werden, wie es Datensätze in Spalte A gibt.
Hier ist mein Code:
Sub Dateien_Kopieren()
'Kopiert Dateien für Projekt A
'Variablendeklaration
Const quellVerzeichnis As String = "C:\Zeichnungen_Quelle\"
Const verzeichnisPMA As String = "C:\Zeichnungen_Test_PMA\"
Const verzeichnisRockson As String = "C:\Zeichnungen_Test_Rockson\"
Const verzeichnisBesecke As String = "C:\Zeichnungen_Test_Besecke\"
Const verzeichnisWSAM As String = "C:\Zeichnungen_Test_BSAM\"
Dim zeichnungNummer As Range
Dim empfaenger1 As String
Dim empfaenger2 As String
Dim dateinameQuelle As String
Dim dateinameZiel As String
'Zielverzeichnisse
empfaenger1 = Cells(4, 5)
empfaenger2 = Cells(4, 6)
'Abgleich der Zeichnungsnummer mit dem Dateinamen
Dim fso As Object, oFile As Object
Set fso = CreateObject("Scripting.FileSystemObject")
For Each oFile In fso.GetFolder(quellVerzeichnis).Files
For Each zeichnungNummer In Range("A4:A" & Cells(Rows.Count, "A").End(xlUp).Row)
If zeichnungNummer "" Then
Next
If InStr(oFile.Name, zeichnungNummer) Then
'Datei ins zielVerzeichnis1 kopieren
If LCase(empfaenger1) = "pma" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisPMA & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
ElseIf LCase(empfaenger1) = "rockson" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisRockson & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
ElseIf LCase(empfaenger1) = "besecke" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisBesecke & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
ElseIf LCase(empfaenger1) = "wsam" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisWSAM & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
End If
'Datei ins zielVerzeichnis2 kopieren
If LCase(empfaenger2) = "pma" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisPMA & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
ElseIf LCase(empfaenger2) = "rockson" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisRockson & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
ElseIf LCase(empfaenger2) = "besecke" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisBesecke & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
ElseIf LCase(empfaenger2) = "wsam" Then
dateinameQuelle = quellVerzeichnis & "\" & oFile.Name
dateinameZiel = verzeichnisWSAM & "\" & oFile.Name
FileCopy dateinameQuelle, dateinameZiel
End If
End If
End If
Next
Next
End Sub