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