Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei mit bestimmten Namen suchen/kopieren

Forumthread: Datei mit bestimmten Namen suchen/kopieren

Datei mit bestimmten Namen suchen/kopieren
Timothy
Hallo miteinander,
ich bin leider noch absoluter Neuling in der VBA-Programmierung.
Komme einfach nicht weiter......
Wie kann ich aus dem aktiven Sheet einen Namen (z.B. XYZ ) aus einer Zelle auslesen, diesen dann in einem Verzeichnis suchen, in welchem der Name als Datei gespeichert ist (z.B. C:\Tabellen\XYZ.mpr ), und diese Datei dann in ein gesondertes Verzeichnis kopieren (z.B. in D:\KopierteTabellen\XYZ.mpr) ?
Ich komm einfach nicht dahinter wie das gehen soll.....
Bitte um eure Hilfe. Besten Dank schon im Voraus!
MfG
Timothy
Anzeige
AW: Datei mit bestimmten Namen suchen/kopieren
18.01.2010 15:10:29
Josef
Hallo Timothy,
Sub copyFile()
  Dim objFSO As Object
  Dim strFileToCopy, strOldPath As String, strNewPath As String
  
  strOldPath = "E:\Temp\" 'Verzeichnis in dem die Datei liegt
  strNewPath = "E:\Temp\Test\" 'Verzeichnis in welches kopiert werden soll
  
  With ActiveSheet
    strFileToCopy = .Range("A1") 'Zelle mit dem Namen
    strFileToCopy = strFileToCopy & ".mpr" 'Suffix anhängen
    If Dir(strOldPath & strFileToCopy, vbNormal) <> "" Then
      Set objFSO = CreateObject("Scripting.FileSystemObject")
      objFSO.copyFile strOldPath & strFileToCopy, strNewPath & strFileToCopy
    End If
  End With
  
  Set objFSO = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Datei mit bestimmten Namen suchen/kopieren
18.01.2010 15:59:33
Timothy
Hallo Sepp,
es funktioniert genauso wie ich es möchte! Vielen Dank, genial wenn es so schlaue Köpfe wie dich gibt!!!
Wenn ich jetzt noch in der Spalte alle Zellen von z.B. 3-8 abarbeiten/kopieren will (H3-H8), dann kann ich dies doch einfach mit einer Schleife machen, oder?!?
AW: Datei mit bestimmten Namen suchen/kopieren
18.01.2010 16:10:53
Josef
Hallo,
ja genau.
Sub copyFile()
  Dim objFSO As Object, rng As Range
  Dim strFileToCopy, strOldPath As String, strNewPath As String
  
  strOldPath = "E:\Temp\" 'Verzeichnis in dem die Datei liegt
  strNewPath = "E:\Temp\Test\" 'Verzeichnis in welches kopiert werden soll
  
  With ActiveSheet
    For Each rng In Range("A1:A5") 'Bereich anpassen!
      strFileToCopy = rng 'Zelle mit dem Namen
      strFileToCopy = strFileToCopy & ".mpr" 'Suffix anhängen
      If Dir(strOldPath & strFileToCopy, vbNormal) <> "" Then
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        objFSO.copyFile strOldPath & strFileToCopy, strNewPath & strFileToCopy
      End If
    Next
  End With
  
  Set objFSO = Nothing
  Set rng = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Datei mit bestimmten Namen suchen/kopieren
18.01.2010 17:03:56
Timothy
Super, so ähnlich habe ich es jetzt gemacht!
Klasse Sepp!
Hier bin ich wohl wirklich auf einen Experten gestoßen ;);)
Aber jetzt ist mir noch eines aufgefallen, was ich gerne als letztes beheben würde:
Ich habe z.B. in der Spalte A den Wert XYZ doppelt aufgelistet (also z.B. in Zeile 3 und Zeile 4).
Wenn ich jetzt das Makro laufen lasse, kopiert es mir die Datei XYZ.mpr nur einmal.
Ich möchte aber dass dann z.B. der Zweite Wert als XYZ_2.mpr gespeichert wird.
Vielen Dank!
I
Anzeige
AW: Datei mit bestimmten Namen suchen/kopieren
18.01.2010 17:53:15
Josef
Hallo Timothy,
bitte das nächste mal gleich mit der ganzen "Wahrheit" herausrücken.
Sub copyFile()
  Dim objFSO As Object, rng As Range
  Dim strFileToCopy, strNewFile As String, strOldPath As String, strNewPath As String
  Dim lngC As Long
  
  strOldPath = "E:\Temp\" 'Verzeichnis in dem die Datei liegt
  strNewPath = "E:\Temp\Test\" 'Verzeichnis in welches kopiert werden soll
  
  With ActiveSheet
    For Each rng In Range("A1:A5") 'Bereich anpassen!
      strFileToCopy = rng 'Zelle mit dem Namen
      strFileToCopy = strFileToCopy & ".mpr" 'Suffix anhängen
      lngC = 1
      If Dir(strOldPath & strFileToCopy, vbNormal) <> "" Then
        Do
          strNewFile = Left(strFileToCopy, InStr(1, strFileToCopy, ".") - 1) & _
            IIf(lngC > 1, "_" & CStr(lngC), "") & Mid(strFileToCopy, _
            InStrRev(strFileToCopy, "."))
          lngC = lngC + 1
        Loop While Dir(strNewPath & strNewFile, vbNormal) <> ""
        
        Set objFSO = CreateObject("Scripting.FileSystemObject")
        objFSO.copyFile strOldPath & strFileToCopy, strNewPath & strNewFile
      End If
    Next
  End With
  
  Set objFSO = Nothing
  Set rng = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Datei mit bestimmten Namen suchen/kopieren
19.01.2010 09:51:14
Timothy
Hallo Sepp,
genial deine Lösung, auch wenn ich dein Programmcode in der Do-Schleife nicht ganz durchschaue.... ;-(
Hab ich leider erst später gesehen, dass ich zwei gleiche Werte in einer Spalte habe, also "Sorry" für die nicht ganz korrekte Fragestellung!
Vielen, vielen Dank!
;
Anzeige
Anzeige

Infobox / Tutorial

Dateien mit bestimmten Namen suchen und kopieren in Excel VBA


Schritt-für-Schritt-Anleitung

Um Dateien mit bestimmten Namen in Excel zu suchen und zu kopieren, können wir VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Kopiere den folgenden Code in das Modul:
Sub copyFile()
    Dim objFSO As Object, rng As Range
    Dim strFileToCopy As String, strNewFile As String
    Dim strOldPath As String, strNewPath As String
    Dim lngC As Long

    strOldPath = "E:\Temp\" 'Verzeichnis in dem die Datei liegt
    strNewPath = "E:\Temp\Test\" 'Verzeichnis in welches kopiert werden soll

    With ActiveSheet
        For Each rng In Range("A1:A5") 'Bereich anpassen!
            strFileToCopy = rng 'Zelle mit dem Namen
            strFileToCopy = strFileToCopy & ".mpr" 'Suffix anhängen
            lngC = 1
            If Dir(strOldPath & strFileToCopy, vbNormal) <> "" Then
                Do
                    strNewFile = Left(strFileToCopy, InStr(1, strFileToCopy, ".") - 1) & _
                        IIf(lngC > 1, "_" & CStr(lngC), "") & Mid(strFileToCopy, _
                        InStrRev(strFileToCopy, "."))
                    lngC = lngC + 1
                Loop While Dir(strNewPath & strNewFile, vbNormal) <> ""

                Set objFSO = CreateObject("Scripting.FileSystemObject")
                objFSO.copyFile strOldPath & strFileToCopy, strNewPath & strNewFile
            End If
        Next
    End With

    Set objFSO = Nothing
    Set rng = Nothing
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro copyFile aus, um die Dateien zu kopieren.

Häufige Fehler und Lösungen

  • Fehler: "Datei nicht gefunden"

    • Überprüfe den Pfad der alten Datei (strOldPath). Achte darauf, dass die Datei tatsächlich vorhanden ist.
  • Fehler: "Zugriff verweigert"

    • Stelle sicher, dass du die nötigen Berechtigungen hast, um auf die Dateien in den angegebenen Verzeichnissen zuzugreifen.
  • Fehler: "Ungültiger Dateiname"

    • Achte darauf, dass die Namen in Spalte A korrekt sind und keine ungültigen Zeichen enthalten.

Alternative Methoden

Wenn du keine VBA-Programmierung verwenden möchtest, kannst du auch:

  • Power Query verwenden: Damit kannst du Daten aus verschiedenen Quellen importieren und transformieren, jedoch ist das Kopieren von Dateien nicht direkt möglich.
  • Batch-Skripte oder Windows PowerShell: Diese Methoden erfordern jedoch zusätzliche Kenntnisse in der Skripterstellung.

Praktische Beispiele

Wenn du in Zelle A1 den Namen XYZ stehen hast und die Datei XYZ.mpr in E:\Temp\ gespeichert ist, wird das oben genannte Makro diese Datei in das Verzeichnis E:\Temp\Test\ kopieren. Falls XYZ.mpr bereits existiert, wird die Kopie als XYZ_1.mpr, XYZ_2.mpr, etc. gespeichert.


Tipps für Profis

  • Nutze die Application.ScreenUpdating = False und Application.DisplayAlerts = False Befehle, um die Ausführungsgeschwindigkeit zu erhöhen und unerwünschte Warnmeldungen zu vermeiden.
  • Erstelle eine Benutzeroberfläche (UserForm), um die Eingabewerte einfacher zu handhaben.
  • Verwende das objFSO-Objekt effektiv, um mit Dateien und Verzeichnissen zu arbeiten.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Dateien in einem Rutsch kopieren?
Du kannst mehrere Namen in den Zellen angeben und das Makro iteriert über diese.

2. Funktioniert das auch in Excel 365?
Ja, der VBA-Code sollte in allen modernen Excel-Versionen funktionieren, einschließlich Excel 365.

3. Wie kann ich den Zielpfad dynamisch machen?
Du kannst den Zielpfad durch eine Eingabe in einer Zelle steuern, indem du den Pfad in deinem Makro anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige