以前我有一个代码块,它将对单个文件使用 GetOpenFilename、设置变量、询问您是否要选择另一个文件(是/否)、执行更多代码来打开第二个文件等。如果用户选择“任何时候“否”,它都会跳过剩余的代码。
我试图做的是将宏存储在工作簿中,最多可打开 3 个文件。然后,它需要使每个工作簿成为自己的变量,因为在将这些变量传递到另一个模块之前,它需要在每个工作簿中找到一个字符串。我不知道代码如何设置每个工作簿。感谢任何帮助。
Dim files As Variant
Dim i As Integer
Dim WBtemp1 As Workbook
Dim WBtemp2 As Workbook
Dim WBtemp3 As Workbook
Dim RF As String
files = Application.GetOpenFilename(FileFilter:="Excel workbooks (*.xls*),*.xls*", Title:="Please select up to 3 Files", MultiSelect:=True)
If Not IsArray(files) Then Exit Sub
If UBound(files) < 3 Then
MsgBox "You have selected more than 3 files."
End If
For i = 1 To UBound(files)
Workbooks.Open files(i)
Next
Set WBtemp1 = Workbooks(1)
Set WBtemp2 = Workbooks(2)
Set WBtemp3 = Workbooks(3)
RF = WBtemp1.Worksheets(1).Range("V3")
RF1 = Mid(RF, 12, 8)
RF = WBtemp2.Worksheets(1).Range("V3")
RF2 = Mid(RF, 12, 8)
RF = WBtemp3.Worksheets(1).Range("V3")
RF3 = Mid(RF, 12, 8)
Call Macro2(WBtemp1, WBtemp2, WBtemp3, RF1, RF2, RF3)
最佳答案
要将变量设置为指向 3 个选定的工作簿,您需要使用 files
数组中存储的值并提取不带文件夹路径的文件名,然后使用它来引用工作簿:
Dim filenames(1 To 3) As String
For i = 1 To 3
filenames(i) = Right(files(i), Len(files(i)) - InStrRev(files(i), "\"))
Next i
Dim WBtemp1, WBtemp2, WBtemp3
Set WBtemp1 = Workbooks(filenames(1))
Set WBtemp2 = Workbooks(filenames(2))
Set WBtemp3 = Workbooks(filenames(3))
或者,更好的是,您可以在打开时将每个工作簿分配给一个变量,然后执行以下操作:
Set WBtemp1 = Workbooks.Open(files(1))
Set WBtemp2 = Workbooks.Open(files(2))
Set WBtemp3 = Workbooks.Open(files(3))
关于arrays - Excel VBA 多选并将工作簿设置为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48512608/