VBA в Excel 2013, прокручуйте файли, де підстановка застосовується до підкаталогу


0

У мене є сценарій MATLAB, який аналізує результати експериментів на ряді віджетів, які робить моя компанія, і, нарешті, експортує узагальнені дані у файл CSV. Я хочу імпортувати всі ці файли CSV в робочу книгу Excel, щоб я міг порівняти підсумовані результати за допомогою зведеної таблиці.

Кожен віджет наразі має власну директорію з підкаталогом наборів даних, який містить файл pivotData.csv . Структура каталогу виглядає приблизно так:

  1. C: \ Шлях \ До \ Віджети
    • Віджет_1 \ Набори даних \ pivotData.csv
    • Віджет_2 \ Набори даних \ pivotData.csv
    • Віджет_3 \ Набори даних \ pivotData.csv
    • Widget_3b \ Набори даних \ pivotData.csv
    • Віджет_4 \ Набори даних \ pivotData.csv

Основна робоча книга, pivotMaster.xlsm , знаходиться в головному каталозі: C: \ Path \ To \ Widgets \ pivotMaster.xlsm

Я створюю макрос у головній робочій книжці, який проходить через кожен каталог віджетів і додає дані в головну робочу книжку.

Поки що мені вдалося скласти цей код разом, який надихнув когось, перебираючи різні файли csv в одному каталозі. Наразі у мене виникають проблеми з використанням підстановки для імені каталогу. Помилка полягає в тому, що я намагаюся ініціалізувати ім'я файлу шляхом об'єднання рядків підстановки Шлях та підкаталога.

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

Хтось може дати мені уявлення про те, що я тут роблю неправильно?


Не можна використовувати символи підстановки ( *) в елементі шляху до каталогу.
DavidPostill

Відповіді:


0

Це дозволить вам отримати папки в папці, просто продовжуйте свердління, поки не знайдете своїх робочих зошитів.

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

Щоб шукати файли -

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

Таким чином, ви можете пройти каталоги, поки не знайдете очікуване ім'я каталогу, а потім шукайте файли csv і робіть все, що вам потрібно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.