2016-05-10 10 views
0

Ich versuche, alle *.xlsx Dateien in einem angegebenen Ordner zu öffnen und die Dateihandles in einem Array zu speichern.Filehandles im Array speichern

Mein Code sieht wie folgt aus

Dim Files() As Workbook 
ReDim Files(Count) 

File = Dir(Path & "\*.xlsx") 
Count = 0 

Do While File <> "" 
    Set Files(Count) = Workbooks.Open(Path & File, , True) 
    Count = Count + 1 
    File = Dir() 
Loop 

Der Code scheint zu funktionieren, aber wenn ich es ein zweites Mal (Schlagen der Lauf-Taste erneut) laufen, bekomme ich eine Fehlernummer 13.

Debuggen den Code aufgespürt ich das Problem mit der Leitung

Set Files(Count) = Workbooks.Open(Path & File, , True) 

Als ich mit vba unerfahren bin ich denke, ich habe dies den richtigen Weg nicht ...

Was wäre eine bevorzugte Methode zum Speichern von Dateihandles in allen Dateien in einem bestimmten Ordner in einem Array? sein

+0

fehlt ... vielleicht das Programm fehlt nur die Arbeitsmappen geschlossen werden ... Ich habe 'Files (Count) .Close()', die das Problem gelöst. – speendo

+1

aber auf diese Weise vermissen Sie die 'Arbeitsmappe' Objektreferenz, die gerade in' Files() 'gespeichert wurde ... – user3598756

Antwort

-1

sollte der Code:

Dim Files() As Workbook 
Dim Count As Integer 
ReDim Files(Count) 

File = Dir(Path & "\*.xlsx") 
Count = 0 

Do While File <> "" 
    ReDim Preserve Files(Count) 
    Set Files(Count) = Workbooks.Open(Path & File, , True) 
    Count = Count + 1 
    File = Dir() 
Loop 

Sie benötigen Array REDIM. Preserve behält die vorhandenen Daten bei.

+0

Ihre erste Redim sollte entfernt werden. Redimmen jedes Mal ist eine Menge Arbeit für VB. –

+0

danke, aber die Array-Größe ist nicht das Problem (ich speichere die Anzahl der Dateien im Ordner auf "Count", bevor ich 'ReDim Files (Count)'). Ich habe versucht, Ihren Code, aber immer noch eine RuntimeError 13. Ich glaube wirklich, ich habe einen Fehler in Workbooks.Open ... – speendo

+0

_ "(Ich speichere die Anzahl der Dateien in den Ordner zu zählen, bevor ich ReDim-Dateien (Count)). "_ -> Also, was ist das? Count = Count + 1" für? – user3598756

0

Sie Pfadtrenn

Set Files(Count) = Workbooks.Open(Path & "\" & File, , True) 
+0

Danke, aber' Path' hat bereits den abschließenden Backslash ... :( – speendo

+1

gut würde ich nicht sagen, dass, weil Sie schreiben 'Datei = Dir (Pfad &" \ *. Xlsx ")' – user3598756

Verwandte Themen