Sub test()
Sub test()
ChDir "U:\GROSSER\BILDER\"
Bild = Dir("EXO360020.jpg")
If Bild = "" Then
'noimage
Else
FileSystemObject.CopyFile "drachen800.jpg", _
"U:\Projekte\Websites\_ZooZemke\Cart\"
End If
End Sub
Option Explicit
'Variablen
'=========
Private varFSArr As Variant
'Funktionen
'==========
Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
ByVal DirPath As String) As Long
Sub A_Start()
'Konstanten
'==========
Const strSuchVerzC As String = "U:\GROSSER\BILDER\" '<<<<<<<BilderVerzeichnis anpassen
Const strNoImage As String = "_NoImage.jpg" '<<<<<<<Name für NoImage anpassen
Const strTabelle As String = "Tabelle1" '<<<<<<<TabellenName anpassen
Const strSpalte As String = "D" '<<<<<<<Spalte anpassen
Const lngStartZeile As Long = 2 '<<<<<<<Erste Zeile anpassen
Const strErgSpalte As String = "F" '<<<<<<<ErgebnisSpalte anpassen
'Variablen
'=========
Dim varArrD() As Variant
Dim varFSArr2() As Variant
Dim lngLRow As Long
Dim lngCount As Long, lngCount2 As Long
Dim strPathToNoImage As String
Dim strSuchVerz As String
'PublicVar=> varFSArr As Variant
'Spalte in DateiArray
'====================
With ThisWorkbook.Worksheets(strTabelle)
lngLRow = IIf(IsEmpty(.Range(strSpalte & .Rows.Count)), _
.Range(strSpalte & .Rows.Count).End(xlUp).Row, .Rows.Count) 'letzte Zeile ermitteln
varArrD = .Range(strSpalte & lngStartZeile & ":" & strSpalte & lngLRow).Value 'Spalte in Array
ReDim Preserve varArrD(1 To UBound(varArrD, 1), 1 To 4) '2.Dimension vergrössern
'(für Dat.Name, gefunden in...)
End With
'Dateinamen im DateiArray extrahieren
'====================================
For lngCount = 1 To UBound(varArrD, 1) 'Für Elemente der 1.Dimension
'wenn "\" in ,1 vorhanden, finde "\" von rechts,
'schreibe Dateiname in ,3 und reinen Pfad in ,2
If Not VarType(varArrD(lngCount, 1)) = vbEmpty Then _
If InStrRev(varArrD(lngCount, 1), "\", Len(varArrD(lngCount, 1))) Then _
varArrD(lngCount, 3) = Right(varArrD(lngCount, 1), _
Len(varArrD(lngCount, 1)) - InStrRev(varArrD(lngCount, 1), "\")): _
varArrD(lngCount, 2) = Left(varArrD(lngCount, 1), _
InStrRev(varArrD(lngCount, 1), "\"))
Next lngCount
'SuchVerz in FSArray abbilden
'============================
ReDim varFSArr(0) 'FSArray leeren
strSuchVerz = strSuchVerzC 'Suchverz. holen
If Right(strSuchVerz, 1) <> "\" Then strSuchVerz = strSuchVerz & "\" '"\" am Ende sichern
SuchRoot (strSuchVerz)
'Dateinamen ins FSArray2 extrahieren
'====================================
ReDim varFSArr2(UBound(varFSArr)) 'Grössen angleichen
For lngCount = 1 To UBound(varFSArr) 'Für jedes Element
'wenn "\" vorhanden, finde "\" von rechts, schreibe Dateiname in FSArray2
If InStrRev(varFSArr(lngCount), "\", Len(varFSArr(lngCount))) Then _
varFSArr2(lngCount) = Right(varFSArr(lngCount), _
Len(varFSArr(lngCount)) - InStrRev(varFSArr(lngCount), "\"))
'Pfad zu strNoImage herauspicken
If LCase(varFSArr2(lngCount)) = LCase(strNoImage) Then strPathToNoImage = varFSArr(lngCount)
Next lngCount
'kein strNoImage=> Meldung und raus
If strPathToNoImage = "" Then MsgBox "Datei " & strNoImage & _
" nicht vorhanden!!!", vbCritical + vbOKOnly, "Fehler" _
: End
'DateiArray durchlaufen und mit
'FSArray2 abgleichen und Quelle
'in DateiArray notieren
'==============================
For lngCount = 1 To UBound(varArrD, 1)
For lngCount2 = 1 To UBound(varFSArr2)
If LCase(varArrD(lngCount, 3)) = LCase(varFSArr2(lngCount2)) Then
varArrD(lngCount, 4) = varFSArr(lngCount2)
Exit For
Else 'Wenn kein Bild->
varArrD(lngCount, 4) = strPathToNoImage ' _noimage.jpg als Quelle
End If
Next lngCount2
Next lngCount
'DateiArray durchlaufen und Dateien kopieren
'existiert ein Bild nicht im Suchverzeichnis
'wird das _noimage.jpg mit dem gesuchtenNamen
'im Ziel eingefügt
'===========================================
For lngCount = 1 To UBound(varArrD, 1)
If VarType(varArrD(lngCount, 1)) = vbString And varArrD(lngCount, 1) Like "?:\*" _
And Not (Mid(varArrD(lngCount, 1), 4) Like "*[/:*?<>|]*") Then
'Sicherstellen, dass der Zielpfad existiert
If MakeSureDirectoryPathExists(varArrD(lngCount, 1)) Then
'Kopieren
FileCopy varArrD(lngCount, 4), varArrD(lngCount, 1)
End If
Else
varArrD(lngCount, 4) = ">>>!!!Fehler im Zielpfad!!!<<<"
End If
Next lngCount
'Quellen aus DateiArray in nun
'nutzloses FSArray2 um es am
'Stück in die Ergebnisspalte
'schieben zu können
'=============================
ReDim varFSArr2(1 To UBound(varArrD, 1), 1)
For lngCount = 1 To UBound(varArrD, 1)
varFSArr2(lngCount, 0) = varArrD(lngCount, 4)
Next lngCount
With ThisWorkbook.Worksheets(strTabelle)
.Range(strErgSpalte & lngStartZeile).Resize(UBound(varFSArr2), 1) = varFSArr2
End With
End Sub
Sub SuchRoot(strQuelle As String)
'Variablen
'=========
Dim objFS As Object
Dim fldQuelle As Object
Set objFS = CreateObject("Scripting.FileSystemObject")
Set fldQuelle = objFS.GetFolder(strQuelle)
Verzeichnisse fldQuelle
Set fldQuelle = Nothing
Set objFS = Nothing
End Sub
Sub Verzeichnisse(objFld As Object)
'!!!Rekursiver Aufruf!!!
'aus "Sub SuchRoot" heraus angestossen
'Variablen
'=========
Dim objSubFld As Object
Dim objFile As Object
Dim objFS As Object
Set objFS = CreateObject("Scripting.FileSystemObject")
For Each objFile In objFld.Files
ReDim Preserve varFSArr(UBound(varFSArr) + 1)
varFSArr(UBound(varFSArr)) = objFile.Path
Next objFile
For Each objSubFld In objFld.SubFolders
Verzeichnisse objSubFld
Next
Set objFS = Nothing
Set objFld = Nothing
Set objSubFld = Nothing
End Sub
Sub CSV_Import()
'Variablen
'=========
Dim varFileNames As Variant
Dim strCurDir As String
Dim varScratch As Variant
Dim varArrCSV As Variant
Dim varArrOut As Variant
Dim lngCount As Long
Dim lngFF As Long
Dim wbkTarget As Workbook
'Konstanten
'==========
Const strPath As String = "U:\Grosser\WWG\WWG_WSTA" '<<<<<<anpassen!!!
'Dialog aufrufen
'==========================================
strCurDir = CurDir 'aktuellen Pfad auslesen
ChDrive strPath 'LW für GOFN-Dialog wechseln
ChDir strPath 'Pfad für GOFN-Dialog wechseln
varFileNames = Application _
.GetOpenFilename("CSV-Dateien (*.csv), *.csv", 1, "Datei wählen", , False) 'Filenamen holen
ChDrive strCurDir 'LW wiederherstellen
ChDir strCurDir 'Pfad wiederherstellen
If VarType(varFileNames) = vbBoolean Then 'bei Abbruch
'MsgBox "Keine Datei gewählt!" 'kleine Meldung
Exit Sub 'Makro Ende
End If
'CSV zu Array
'==========================================
lngFF = FreeFile 'FreeFileNummer holen
ReDim varArrCSV(1 To 5, 1) 'Array vorbereiten
Open varFileNames For Input As #lngFF 'Datei öffnen
Do While Not EOF(lngFF) 'bis EOF
Line Input #lngFF, varScratch 'Zeile einlesen
varScratch = Split(varScratch, ";") 'Zeile an ";" trennen
ReDim Preserve varArrCSV(1 To 5, 1 To UBound(varArrCSV, 2) + 1) 'Array vergrössern
For lngCount = 1 To UBound(varScratch) + 1 'Zeilenteile durchlaufen
'Wenn Zahl dann ersetze "." durch "," und wandle zu Zahl
'sonst wie gelesen ins Array
If IsNumeric(varScratch(lngCount - 1)) Then _
varArrCSV(lngCount, UBound(varArrCSV, 2) - 1) = CDbl(Replace(varScratch(lngCount - 1), ".", ",")) _
Else _
varArrCSV(lngCount, UBound(varArrCSV, 2) - 1) = varScratch(lngCount - 1)
Next lngCount
Loop
Close #lngFF 'Datei Schliessen
'OutArray in neue Mappe
'==========================================
Set wbkTarget = Application.Workbooks.Add(1) 'Neues Workbook (eine Tabelle)
varArrOut = WorksheetFunction.Transpose(varArrCSV) 'Array drehen
With wbkTarget.ActiveSheet.Range("A1").Resize(UBound(varArrOut, 1), UBound(varArrOut, 2))
.Value = varArrOut 'Array am Stück in Tabelle
.Columns.AutoFit 'SpaltenBreite auf Auto
.Columns(.Columns.Count).NumberFormat = "0.00" 'Format letzte Spalte auf Zahl
End With
Set wbkTarget = Nothing 'ObjectVerweis aufheben
End Sub
Suchen und Kopieren
snoelg 25.06.2009 - 267 Hits - 12 Antworten
Zelle nach Datum auslesen und Kopieren
Kaffee2010 11.01.2010 - 163 Hits - 4 Antworten
In Win xp mit suchen Dateien suchen - Ergebnis in Excel übertragen
kati2 27.01.2010 - 129 Hits - 2 Antworten
Makro: Formatierung suchen, Zeile kopieren
woher2010 03.05.2010 - 316 Hits - 10 Antworten
Via Userform Eintrag suchen, kopieren und Inhalte löschen
BenjaminM 23.06.2010 - 334 Hits - 16 Antworten