如何引用用户定义的工作簿和工作表excel VBA

如何引用用户定义的工作簿和工作表excel VBA,vba,excel,Vba,Excel,我有一段VBA代码,让用户为vlookup选择一个要引用的文件,并将其分配给变量UserFile。在代码的后面,我有一个代码片段想要引用UserFile中的工作表 当我输入文件的实际名称时,它可以工作,我如何使它工作,使它引用UserFile,而不是命名的文件(它每天都会更改) 这项工作: Sub Macro5() Dim MyFile As String UserFile = Application.GetOpenFilename() Acti

我有一段VBA代码,让用户为vlookup选择一个要引用的文件,并将其分配给变量UserFile。在代码的后面,我有一个代码片段想要引用UserFile中的工作表

当我输入文件的实际名称时,它可以工作,我如何使它工作,使它引用UserFile,而不是命名的文件(它每天都会更改)

这项工作:

Sub Macro5()
        Dim MyFile As String
        UserFile = Application.GetOpenFilename()

        ActiveCell.Select
        ActiveCell.FormulaR1C1 = _
            "=VLOOKUP(RC[-5],'[M2606170810.xlsx]Availability'!R3C1:R321C24,9,0)"
        ActiveCell.Select
        Selection.Copy
        ActiveCell.Range("A1:A37").Select
        ActiveSheet.Paste
    End Sub
这并不是(唯一的变化是在vlookup公式中):

我试过了,但没用


我想让用户选择要引用的正确文件的选项,并想将其添加到流中

您需要拆分路径和文件名,以便将其放置在公式中的适当位置。另外,您可以避免使用Select方法,因为它不是真正需要的,而且效率很低。试试看

Sub Macro5()

    Dim UserFile As String, MyPath As String, MyFile As String

    UserFile = Application.GetOpenFilename( _
         FileFilter:="Excel Files (*.xls;*.xlsx), *.xls;*.xls", Title:="Select a file")

    If UserFile = "False" Then
        MsgBox "User cancelled...", vbInformation
        Exit Sub
    End If

    MyPath = Left(UserFile, InStrRev(UserFile, "\"))
    MyFile = Mid(UserFile, InStrRev(UserFile, "\") + 1)

    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC[-5],'" & MyPath & "[" & MyFile & "]Availability'!R3C1:R321C24,9,0)"

    ActiveCell.Copy Destination:=ActiveCell.Range("A1:A37")

End Sub

您会注意到,我还添加了几行,以允许用户取消对话框。我还为GetOpenFilename方法添加了一个文件过滤器,以确保用户只选择正确的文件类型(即xls或xlsx)。根据需要进行更改。

这将引用文件本身。我想你的意思是
Userfile.Name
Userfile.Fullname
:)。@BrandonBarney
Userfile
只是一个[n未声明的]/variant/]字符串
UserFile=Application.GetOpenFilename
@BrandonBarney感谢您为我指出了这一点。我已经相应地编辑了我的文章。@Mat'smugh我的坏消息。我完全跳过了代码的阅读,只是假设我知道变量的含义。请忽略我的评论:p。我一定没注意!首先声明
MyFile
并分配
UserFile
Sub Macro5()

    Dim UserFile As String, MyPath As String, MyFile As String

    UserFile = Application.GetOpenFilename( _
         FileFilter:="Excel Files (*.xls;*.xlsx), *.xls;*.xls", Title:="Select a file")

    If UserFile = "False" Then
        MsgBox "User cancelled...", vbInformation
        Exit Sub
    End If

    MyPath = Left(UserFile, InStrRev(UserFile, "\"))
    MyFile = Mid(UserFile, InStrRev(UserFile, "\") + 1)

    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC[-5],'" & MyPath & "[" & MyFile & "]Availability'!R3C1:R321C24,9,0)"

    ActiveCell.Copy Destination:=ActiveCell.Range("A1:A37")

End Sub