Excel 使用输入框将另一个工作簿引用到子工作簿中

Excel 使用输入框将另一个工作簿引用到子工作簿中,excel,vba,Excel,Vba,我创建了一个sub,它允许您输入希望sub引用的文件名,而不是对单个文件进行编码。然而,在输入框之外,我得到了错误“下标超出范围”。我尝试输入带“”和不带“”以及文件扩展名.xls的文件名 Sub tester() Dim wbName As String wbName = Application.InputBox("What is the workbook name?") If Right(wbName, 4) <> ".xls" Then wbName = wbName + "

我创建了一个sub,它允许您输入希望sub引用的文件名,而不是对单个文件进行编码。然而,在输入框之外,我得到了错误“下标超出范围”。我尝试输入带“”和不带“”以及文件扩展名.xls的文件名

Sub tester()

Dim wbName As String
wbName = Application.InputBox("What is the workbook name?")
If Right(wbName, 4) <> ".xls" Then wbName = wbName + ".xls"
Set mainWB = Workbooks(wbName)

Dim copyThis As Range, pasteThis As Range

Set copyThis = mainWB.Worksheets(2).Columns("F")
Set pasteThis = Workbooks("VBA Workbook.xlsm").Worksheeets(1).Columns("A")

copyThis.Copy Destination:=pasteThis

End Sub
子测试仪()
将wbName设置为字符串
wbName=Application.InputBox(“工作簿名是什么?”)
如果正确(wbName,4)“.xls”,则wbName=wbName+”.xls”
Set mainWB=工作簿(wbName)
调暗复制此范围,粘贴此范围
设置copyThis=mainWB.工作表(2).列(“F”)
设置pasteThis=工作簿(“VBA工作簿.xlsm”)。工作表(1)。列(“A”)
复制此。复制目标:=pasteThis
端接头

每当有用户干预时,您都必须使用大量错误处理来避免可能的错误。我使用
Userform
insetad进行了推荐。输入工作簿名称,使用
UserForm
witma
ComboBox1
(如下图所示),而不是创建用户,这样用户就可以选择相关工作簿,而不是键入名称

代码

Option Explicit

Private Sub UserForm_Initialize()
    Dim wkb As Workbook
    Me.Label1.Caption = "Please select the relevant workbook"
    With Me.ComboBox1
        '~~> Loop thorugh all open workbooks and add
        '~~> their name to the Combobox
        For Each wkb In Application.Workbooks
            .AddItem wkb.Name
        Next wkb
    End With
End Sub

Private Sub CommandButton1_Click()
    If ComboBox1.ListIndex = -1 Then
        MsgBox "Please select a wotkbook name and try again"
        Exit Sub
    End If

    Dim wb As Workbook

    Set wb = Workbooks(ComboBox1.List(ComboBox1.ListIndex))

    With wb
        MsgBox .FullName

        '~~> Do what you want
    End With
End Sub

一般来说,包括扩展应该始终有效。如果用户未选中Windows资源管理器选项“隐藏已知文件类型的扩展名”,则不包括扩展名将不起作用。如果用户输入“test.xlsx”怎么办?您的代码会将其更改为“test.xlsx.xls”。您是说您发布的代码无效吗?或者您有一些其他代码正在执行此操作,但在这里输入了一些字符串变量来代替您硬编码的
“VBA工作簿.xlsm”
名称?@TimWilliams能否展开Windows资源管理器选项?我正在输入扩展名添加到的文件名(“文件名”),并且该文件已打开,但它仍然返回超出范围的信息。以前:。另请参见:尝试更改代码以接受完整的文件名(包括扩展名)-是否有效?还要确保所有工作簿都在同一个Excel实例中打开:如果所选工作簿是在与代码运行位置不同的Excel实例中打开的,则它不会在工作簿集合中。谢谢,这很有趣。然而,我得到了错误“无效使用我的关键字”你是否创建了一个用户表单并将你的控件放在那里
Me
指的是
Userform
我添加了一个Userform组合框并将其分配给宏,但是它仍然返回无效的Use。您应该得到它,但可以随意删除
Me。
它应该仍然有效。顺便说一句,所有这些代码都在用户表单中。它在一个我认为是私有子模块的模块中-我如何将它放在用户表单中?