VBA Datein anhand Excel Tabelle kopieren
#1
Hallo alle zusammen.

Eins vorweg ich kenne mich absolut nicht in VBA aus :)
Ich habe folgen Tabelle in Excel (siehe Ende)
Die Dateien liegen alle in einem Ordner.
Ich möchte jetzt das Excel mit hilfe von VBA den Ordner 1 erstellt und die Dateien 1 - 12 dort reinkopiert, dann Ordner 2 mit Dateien 13 - 20 usw.
Außerdem soll angezeigt werden wenn eine Datei nicht gefunden.
Würde sowas gehen und wie müsste der Code aussehen, habe mich schon durch so viele Codes und Hilfen gelesen, aber ich verstehe es einfach nicht.

DANKE !!!!!!!!!!!!!!!!


Angehängte Dateien Thumbnail(s)
   
Top
#2
Hallo,
Sub DateienKopieren()
Dim strPfad As String
Dim strZieldatei As String
Dim strZielordner As String
Dim rngDatei As Range
strPfad = "F:\Uwe\Documents\Excel\Foren\CEF\Ordner0\" 'anpassen!
For Each rngDatei In Cells(1, 2).CurrentRegion.Columns(2).Cells
strZieldatei = rngDatei.Value
If Dir(strPfad & strZieldatei) = strZieldatei Then
strZielordner = rngDatei.Offset(, -1).MergeArea(1).Value
If Dir(strPfad & strZielordner, vbDirectory) = "" Then
MkDir strPfad & strZielordner
End If
FileCopy strPfad & strZieldatei, strPfad & strZielordner & "\" & strZieldatei
Else
rngDatei.Font.Strikethrough = True
End If
Next rngDatei
End Sub
Gruß Uwe
Top
#3
Hallo Uwe.

Vielen Dank
Funktioniert perfekt.

Ich habe noch eine kleine bitte.
Sind leider 2 Sachen.

Das der Dateiname nicht durchgestrichen wird sondern in der Zelle neben dran nicht vorhanden steht.
Eine Datei sieht wir folgt aus:


RL5_5M_IZ5U1PX_V3.xls

Jetzt ist es so das die Versionen sich ändern können, das heißt hinten würde anstatt V3 jetzt V4 stehen.
Was sich nie ändert ist der 3. Block (IZ5U1PX) aber dort ohne das "I" also Z5U1PX. würde das auch gehen wenn nur das abgefragt werden würde und wenn ja wie?? :)

DANKE VIELEN DANK!!!!!!!
Top
#4
Hallo,

teste mal damit:
Sub DateienKopieren_2()
  Dim rngDatei As Range
  Dim strPfad As String
  Dim strZieldatei As String
  Dim strZielordner As String
  Dim varTemp As Variant
  strPfad = "F:\Uwe\Documents\Excel\Foren\CEF\Ordner0\" 'anpassen!
  For Each rngDatei In Cells(1, 2).CurrentRegion.Columns(2).Cells
    varTemp = Split(rngDatei.Value, "_")
    If UBound(varTemp) = 3 Then
      strZieldatei = Dir(strPfad & "*_?" & Mid(varTemp(2), 2) & "_*")
      If Len(strZieldatei) Then
        strZielordner = rngDatei.Offset(, -1).MergeArea(1).Value
        If Dir(strPfad & strZielordner, vbDirectory) = "" Then
          MkDir strPfad & strZielordner
        End If
        FileCopy strPfad & strZieldatei, strPfad & strZielordner & "\" & strZieldatei
        rngDatei.Offset(, 1).Value = strZieldatei & " kopiert"
      Else
        rngDatei.Offset(, 1).Value = "nicht vorhanden"
      End If
    Else
      rngDatei.Offset(, 1).Value = "ungültiger Dateiname"
    End If
  Next rngDatei
End Sub
Gruß Uwe
Top
#5
Hallo Uwe.

Das Script bleibt leider hier hängen
FileCopy strPfad & strZieldatei, strPfad & strZielordner & "\" & strZieldatei

Fehler 70 zugriff verweiger.

Was muss ich als Suchkriterium eingeben, den kompletten Dateinamen oder die 6 Zeichen nach denen gesucht werden soll?

DANKE
Top
#6
Hallo,

Du musst den kompletten Dateinamen als Suchkriterium eingeben.
Teste es in einem Verzeichnis, in dem Du Lese- und Schreibrechte hast.

Gruß Uwe
Top
#7
Hallo Uwe.

Danke es klappt.

Ich muss nur was ändern und weiß nicht so recht wo.

Ich habe den Ordner in Spalte BM, den Dateinamen in Spalte BN, und den Status in BO.
Das ganze ab zeile 6

Danke
Top
#8
Hallo,

ändere die Zeile
For Each rngDatei In Cells(1, 2).CurrentRegion.Columns(2).Cells
in
For Each rngDatei In Cells(6, 65).Resize(Application.Max(1, Cells(Rows.Count, 66).End(xlUp).Row - 5), 3).Columns(2).Cells
Gruß Uwe
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste