我有一段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,但无济于事。
我希望用户可以选择要引用的正确文件,并希望在流程中添加此文件
答案 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)。根据需要改变。