Импорт нескольких файлов CSV на один лист в Excel с использованием VBA (в настоящее время может сделать только 1) - PullRequest
1 голос
/ 16 апреля 2019

Я разработал рабочую книгу с поддержкой VBA, которая позволяет пользователю выбирать файл .csv (который является экспортом клиента из другой системы), а затем обрабатывает его для получения ряда различных групп пользователей, основанных на различных пользователях. определенные критерии и т. д.

Все работает очень хорошо. Тем не менее, он может обрабатывать только один CSV-файл за раз.

Текущий подход, который я использовал, в основном импортирует содержимое выбранного CSV-файла на новый лист, а затем я просто запрашиваю эти данные и делаю с ними то, что мне нужно. Однако, поскольку я не использовал VBA в течение очень долгого времени, я не уверен, как использовать то, что я уже написал, для выбора нескольких файлов CSV.

    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        'We only want to allow CSV files as this is what the ADT comes in
        .Filters.Add "ADT CSV Files", "*.csv", 1
        'Show the dialog box
        .Show

    'Error check in case user cancels dialog box to prevent type-mismatch error

    If (.SelectedItems.Count = 0) Then

        Range("C19").Value = "File selection aborted."
    Else
        'Store in fullpath variable
        Range("C19").Value = "Processing..."
        fullpath = .SelectedItems.Item(1)
    End If
    End With

    'A final check to make sure that the user hasn't done anything odd and somehow selected an invalid file format

    If InStr(fullpath, ".csv") = 0 Then
        Exit Sub
    End If

    Range("J26").Value = "Source File:"
    Range("J27").Value = fullpath

    'Now we grab the data from the file and import it into a new sheet within workbook

    Set Ws = ThisWorkbook.Sheets.Add
    Ws.Name = "ADT Data"

    'The ADT seems to be using fairly standard formatting conditions, so the following should surfice

         With Ws.QueryTables.Add(Connection:= _
        "TEXT;" & fullpath, Destination:=Ws.Range("$A$1"))

        .Name = "ADT Data"
        .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 = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileCommaDelimiter = True
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False

    End With

    'Now we trigger our main triage processes

    Call Extract

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

1 Ответ

2 голосов
/ 16 апреля 2019

Эта опция имеет значение false

.AllowMultiSelect = False

Я бы создал объект для ссылки на FileDialog

'Declare a variable as a FileDialog object and set it like so: Dim fd As FileDialog 'Create a FileDialog object as a File Picker dialog box. Set fd = Application.FileDialog(msoFileDialogFilePicker)

Затем вы можете перебрать коллекцию SelectedItems объекта fd. For Each vrtSelectedItem In .SelectedItems

Затем выполните операции с каждым выбранным файлом.

В документации AllowMultiSelect есть полезная информация.

https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa210129(v%3Doffice.11)

Надеждаэто помогает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...