Слияние результатов из нескольких операторов Application.GetOpenFilename - PullRequest
0 голосов
/ 04 августа 2020

Мой сценарий получает список имен файлов с помощью Application.GetOpenFilename и присваивает их переменной, объявленной как вариант (varList1). Пока сценарий работает нормально.

Я хочу снова вызвать Application.GetOpenFilename, чтобы получить второй список имен файлов (varList2).

Как мне добавить varList2 в varList1 или как мне объединить их оба в третью переменную (varList)? Это было бы намного проще, чем редактировать сценарий до l oop через второй список имен файлов.

Dim varList1, varList2, varList As Variant
Dim lReturn As Long
Dim itm as Object

lReturn = SetCurrentDirectoryA(sBasePath & "\" & lYear & "\")
varList1 = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv),*.csv", Title:="Choose Excel files to merge", MultiSelect:=True)
lReturn = SetCurrentDirectoryA(sBasePath & "\" & lYear+1 & "\")
varList2 = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv),*.csv", Title:="Choose Excel files to merge", MultiSelect:=True)

varList = ?

or

(This give an "object required" error)
For each itm in varList2
   varList1.Add(itm)
next itm

1 Ответ

0 голосов
/ 04 августа 2020

Если вы выбираете несколько файлов, вариант представляет собой массив. Этот код создает третий массив для хранения всех файлов.

Sub GetFiles()
    Dim varList1, varList2, varList As Variant
    Dim lReturn As Long
    Dim itm As Variant
    
    Dim FileList() As String  ' all files
    
    lReturn = SetCurrentDirectory(sBasePath & "\" & lYear & "\")
    varList1 = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv),*.csv", Title:="Choose Excel files to merge", MultiSelect:=True)
    lReturn = SetCurrentDirectoryA(sBasePath & "\" & lYear + 1 & "\")
    varList2 = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv),*.csv", Title:="Choose Excel files to merge", MultiSelect:=True)
    
    If IsArray(varList1) Then  '<~~ If user selects multiple file
        ReDim Preserve FileList(UBound(varList1) - 1) ' expand main array
        For i = LBound(varList1) To UBound(varList1)  ' copy files
            FileList(i - 1) = varList1(i)
        Next i
    Else                       ' <~~ If user selects single file
        FileList(0) = varList1
    End If
    
    curcnt = UBound(FileList)  ' from first list
    
    If IsArray(varList2) Then  '<~~ If user selects multiple file
        ReDim Preserve FileList(UBound(FileList) + UBound(varList2))  ' expand main array
        For i = LBound(varList2) To UBound(varList2)  ' add new files
            FileList(i + curcnt) = varList2(i)
        Next i
    Else                       '<~~ If user selects single file
        FileList(1 + curcnt) = varList2
    End If
        
    For Each itm In FileList
       MsgBox itm
    Next itm
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...