VBA in Excel 2013, Schleife durch Dateien, bei denen der Platzhalter für das Unterverzeichnis gilt

1838
cbcoutinho

Ich habe ein MATLAB-Skript, das die experimentellen Ergebnisse einer Reihe von Widgets analysiert, die mein Unternehmen erstellt, und schließlich die zusammengefassten Daten in eine CSV-Datei exportiert. Ich möchte alle diese CSV-Dateien in eine Excel-Arbeitsmappe importieren, damit ich die zusammengefassten Ergebnisse mithilfe einer Pivot-Tabelle vergleichen kann.

Jedes Widget verfügt derzeit über ein eigenes Verzeichnis mit einem Datasets- Unterverzeichnis, das eine Datei pivotData.csv enthält. Die Verzeichnisstruktur sieht ungefähr so ​​aus:

  1. C: \ Pfad \ An \ Widgets
    • Widget_1 \ Datensätze \ pivotData.csv
    • Widget_2 \ Datensätze \ pivotData.csv
    • Widget_3 \ Datensätze \ pivotData.csv
    • Widget_3b \ Datensätze \ pivotData.csv
    • Widget_4 \ Datensätze \ pivotData.csv

Die Master-Arbeitsmappe, pivotMaster.xlsm, befindet sich im Hauptverzeichnis: C: \ Pfad \ To \ Widgets \ pivotMaster.xlsm

Ich erstelle ein Makro in der Master-Arbeitsmappe, das jedes Widget-Verzeichnis durchläuft und die Daten in der Master-Arbeitsmappe anfügt.

Bisher konnte ich diesen Code zusammenstellen, der von jemandem inspiriert wurde, der verschiedene csv-Dateien im selben Verzeichnis durchläuft. Ich habe zurzeit Probleme, einen Platzhalter für einen Verzeichnisnamen zu verwenden. Der Fehler liegt vor, wenn ich versuche, den Dateinamen durch Verketten der Pfad- und Unterverzeichnis-Platzhalterzeichenfolgen zu initialisieren.

Sub test() 'DECLARE AND SET VARIABLES Dim wbk As Workbook Dim Filename As String Dim Path As String Path = "C:\Path\To\Widgets\" Filename = Dir(Path & "Widget_*\Datasets\pivotData.csv") %%% <-- I get an error on this line &&& '-------------------------------------------- 'OPEN EXCEL FILES  'Clear all the previous contents Application.Run ("clearContents")  'Loop over all "pivotData.csv" files in Filename Do While Len(Filename) > 0 'IF NEXT FILE EXISTS THEN Set wbk = Workbooks.Open(Path & Filename)  'Notify User that Filename has opened MsgBox Filename & " has opened" 'OPTIONAL- CAN COMMENT OUT  'Move to first empty row below "A1" Range("A1").Select Selection.End(xlDown).Select ActiveCell.FormulaR1C1 = "=R[1]C[0]"  'Import Data from Text file "Filename" With ActiveSheet.QueryTables.Add(Connection:= _ wbk, Destination:= _ ActiveCell) .CommandType = 0 .Name = "pivotData_1" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 850 .TextFileStartRow = 2 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 4, 4, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Range("A1").Select wbk.Close True Filename = Dir Loop End Sub  Sub clearContents() ' ' clearContents Macro clears everything below the headers '  ' Rows("2:2").Select Range(Selection, Selection.End(xlDown)).Select Selection.clearContents End Sub 

Kann mir jemand eine Vorstellung davon geben, was ich hier falsch mache?

0
In einem Verzeichnispfadelement können keine Platzhalterzeichen (`*`) verwendet werden. DavidPostill vor 8 Jahren 0

1 Antwort auf die Frage

0
Raystafarian

Dadurch erhalten Sie Ordner in einem Ordner. Fahren Sie einfach weiter, bis Sie Ihre Arbeitsmappen gefunden haben.

Sub DrillDown()  Dim path As String path = "C:\path\to"  Dim FileSystem As Object Set FileSystem = CreateObject("Scripting.FileSystemObject")  Dim SubFolder For Each SubFolder In FileSystem.GetFolder(path).subfolders Debug.Print SubFolder  Next  End Sub 

Durchsuchen nach Dateien suchen -

Sub LookForFiles() Dim filename As Variant filename = Dir("C:\path\to\" & "*.csv") Do While filename <> "" Debug.Print filename filename = Dir Loop End Sub 

Sie können also die Verzeichnisse durchgehen, bis Sie den gewünschten Verzeichnisnamen finden, dann nach den CSV-Dateien suchen und tun, was Sie möchten.