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

时间:2017-06-28 15:58:30

标签: excel vba excel-vba

我有一段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公式中更改):

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

    ActiveCell.Select
    ActiveCell.FormulaR1C1 = _
        "=VLOOKUP(RC[-5],'[UserFile]Availability'!R3C1:R321C24,9,0)"
    ActiveCell.Select
    Selection.Copy
    ActiveCell.Range("A1:A37").Select
    ActiveSheet.Paste
End Sub

我试过Reference an excel sheet from another workbook without copying the sheet,但无济于事。

我希望用户可以选择要引用的正确文件,并希望在流程中添加此文件

1 个答案:

答案 0 :(得分:2)

您需要拆分路径和文件名,以便将其放置在适当位置的公式中。此外,您可以避免使用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方法添加了一个FileFilter,以确保用户只选择正确的文件类型(即xls或xlsx)。根据需要改变。