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

Array - pdf-Ordner einlesen / Tempo

Forumthread: 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


Anzeige

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
Anzeige
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
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