Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1076to1080
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

Array - pdf-Ordner einlesen / Tempo

Array - pdf-Ordner einlesen / Tempo
20.05.2009 10:51:28
Florian
Hallo liebes Forum!
Ich habe eine Makro, die ca. 1000 xls-Dateine (eine Artikelnummer = 1 Datei) öffnet und (u.a.) die Existenz diverser Dokumente je Artikelnummer prüft. Die Dokumente liegen als pdf in einem Ordner, jedes pdf trägt dabei Artikelnummer im Namen. Der Abgleich (mit Ranges, also Info, ob pdf existiert, steht in Worksheet) funktioniert ohne Probleme, aber: ich möchte den ganzen Ablauf so schnell wie mölich machen ==> Arrays.
Frage nun: kann ich den "Umweg" über Worksheet umgehen und gleich pdf-Dateiname/Pfad in Array schreiben? Funktionieren denn bei einem Array Funktionen wie etwa die "Left"-Funktion (ich hatte da ne Fehlermeldung). Oder würde es den Ablauf bereits genug beschleunigen, wenn ich indirekt vorgehe, also zuerst alles in ein Sheet importiere, dann vom Sheet in Array, das Sheet schliesse und den eigentlichen Abgleich der 1000 Dateien nur mit dem Array mache?
Anbei der prinzipielle Code. Danke Euch schon mal im Voraus!
Florian

Sub Lies_PDF_In_Array()
Set SteuerDatei = ThisWorkbook
MyPath = SteuerDatei.Path
Workbooks.Add
Set BB740_Datei = Workbooks(Workbooks.Count)
Worksheets(3).Delete
Worksheets(2).Delete
BB740_Datei.Sheets(1).Name = "KdeSkjem"
Set KdeSkjemSheet = BB740_Datei.Sheets("KdeSkjem")
'   Einlesen der pdfs in eine Range
Set FsoPdf = CreateObject("Scripting.FileSystemObject")
For Each oPDF_File In FsoPdf.getfolder("\\*****PFAD****").Files
If LCase(Right(oPDF_File.Name, 4)) = ".pdf" Then
LastRowKdeSkjem = KdeSkjemSheet.Cells(Rows.Count, 1).End(xlUp).Row - Not IsEmpty( _
KdeSkjemSheet.Cells(Rows.Count, 1).End(xlUp))
KdeSkjemSheet.Cells(LastRowKdeSkjem, 1) = Left(oPDF_File.Name, 5)
KdeSkjemSheet.Cells(LastRowKdeSkjem, 2) = "\\*****PFAD****\" & oPDF_File.Name
End If
Next oPDF_File
'   Einlesen der Range in Array
ReDim KdeSkjemArr(1 To LastRowKdeSkjem, 1 To 2)
For iArr = 1 To LastRowKdeSkjem
KdeSkjemArr(iArr, 1) = KdeSkjemSheet.Cells(iArr, 1)
KdeSkjemArr(iArr, 2) = KdeSkjemSheet.Cells(iArr, 2)
Next iArr
'   Kontrolle: Übergabe der Array-Daten an Range
For iArr = 1 To LastRowKdeSkjem
KdeSkjemSheet.Cells(iArr, 4) = KdeSkjemArr(iArr, 1)
KdeSkjemSheet.Cells(iArr, 5) = KdeSkjemArr(iArr, 2)
Next iArr
BB740_Datei.SaveAs Filename:=MyPath & "\Sammelfiler\BB740.xls"
BB740_Datei.Close Savechanges:=True
End Sub


3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array - pdf-Ordner einlesen / Tempo
20.05.2009 11:35:49
Rudi
Hallo,
Vorschlag:

Sub Lies_PDF_In_Array()
Dim oDict As Object, arrKeys, arrItems, iArr As Long
Dim KdeSkjemArr(), myPath As String, Steuerdatei As Workbook
Set Steuerdatei = ThisWorkbook
myPath = Steuerdatei.Path
Set oDict = CreateObject("scripting.dictionary")
Workbooks.Add
Set BB740_Datei = Workbooks(Workbooks.Count)
Worksheets(3).Delete
Worksheets(2).Delete
BB740_Datei.Sheets(1).Name = "KdeSkjem"
Set KdeSkjemSheet = BB740_Datei.Sheets("KdeSkjem")
'   Einlesen der pdfs in eine Range
Set FsoPdf = CreateObject("Scripting.FileSystemObject")
For Each oPDF_File In FsoPdf.getfolder("\\*****PFAD****").Files
If LCase(Right(oPDF_File.Name, 4)) = ".pdf" Then
If Not oDict.exists(Left(oPDF_File.Name, 5)) Then
oDict.Add Left(oPDF_File.Name, 5), "\\*****PFAD****\" & oPDF_File.Name
End If
End If
Next oPDF_File
arrItems = oDict.items
arrKeys = oDict.keys
'   Einlesen Dictionary-Objekt in Array
arrItems = oDict.items
arrKeys = oDict.keys
ReDim KdeSkjemArr(1 To oDict.Count, 1 To 2)
For iArr = 1 To oDict.Count
KdeSkjemArr(iArr, 1) = arrKeys(iArr - 1)
KdeSkjemArr(iArr, 2) = arrItems(iArr - 1)
Next iArr
'   Kontrolle: Übergabe der Array-Daten an Range
KdeSkjemSheet.Cells(1, 4).Resize(oDict.Count, 2) = KdeSkjemArr
BB740_Datei.SaveAs Filename:=myPath & "\Sammelfiler\BB740.xls"
BB740_Datei.Close Savechanges:=True
End Sub


Gruß
Rudi

Anzeige
Danke, Literatur?
20.05.2009 14:57:31
Florian
Hi Rudi,
Danke für die Hilfe, funktioniert. Meine Frage: Gibt es ein gutes (englischsprachiges) Buch, dass sich mit Sachen wie diesen (Create Object, FileSystemObject usw.) in VBA beschäftigt. Ich hatte bereits öfter mit Solchen Sachen zu tun (Existenz von pdf, jpg usw. überprüfen), habe das aber noch nicht so ganz verstanden. Wäre super, wenn jemand einen Tip hätte.
Schönen Tag noch!
Gruss Florian
AW: Danke, Literatur?
20.05.2009 23:34:51
Rudi
Hallo,

Gibt es ein gutes (englischsprachiges) Buch,...


keine Ahnung. Foren lesen!
Gruß
Rudi

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige