arrays - Excel VBA 多选并将工作簿设置为变量

标签 arrays vba excel multi-select

以前我有一个代码块,它将对单个文件使用 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/

相关文章:

excel - 插入形状逐渐变慢

excel - 限制对 Excel 工作表的查看访问

arrays - mongoDB:按内含值查找

excel - 如何在范围内找到特定颜色,然后如果单元格为 = "",则将值设为 0 并在单元格中保持相同的颜色

excel - 隐藏选定单元格中的公式

vba - 在 VBA 中通过字符串的值调用变量

javascript - 如何利用 JavaScript 和 ES5 从基于关键字段的对象数组中获取唯一值

PHP 7.1 用动态变量替换多个值

javascript - 将 php 对象转换为 javascript 数组

vba - 循环范围,一旦找到值,复制单元格值和下面的所有内容并移动到下一列