我想使用GetOpenFileName和VLOOKUP从封闭的工作表中提取数据,但是我是VBA的新手,并不熟悉语法。
我一直遇到未指出错误之处的“自动化错误”或“对象错误”。 我相信我在VLOOKUP中的范围arg不正确,但是不确定应该是什么。 有人可以帮我吗?
Sub GetAmazonInventory()
Dim wbk As Workbook
Set wbk = Workbooks.Open(FileName:=Application.GetOpenFilename, ReadOnly:=True)
wbk.Activate
Dim shtName As String
shtName = wbk.Worksheets(1).Name
Dim sh As Worksheet
Set sh = wbk.Worksheets(shtName)
wbk.Close
ActiveCell.Value = Application.IfError(Application.VLookup(ActiveCell.Offset(0, -12), sh.Range("A2:F900"), 5, False), 20)
End Sub
答案 0 :(得分:2)
发生错误的原因是您已关闭工作簿,并且仍在尝试从已关闭的工作簿中提取范围。
如果您想保持新工作簿的打开状态,但使用原始ActiveCell
的范围,则可以为该单元格创建一个变量。
Sub GetAmazonInventory()
' Set a reference to your 'Active Cell'
Dim myCell As Range
Set myCell = ActiveCell
Dim wbk As Workbook, ws As Worksheet
Set wbk = Workbooks.Open(Filename:=Application.GetOpenFilename, ReadOnly:=True)
Set ws = wbk.Worksheets(1)
myCell.Value = Application.IfError(Application.VLookup(myCell.Offset(0, -12), _
ws.Range("A2:F900"), 5, False), 20)
wbk.Close
End Sub
侧面说明:您无需仅设置工作表就获得工作表的名称。所以我删除了。
我还将添加一些验证,以确保活动单元至少在正确的列/行中。例如,如果您的活动单元格应始终位于B列中,则类似以下内容:
If myCell.Column <> 2 then Msgbox "ActiveCell is not in the correct column. Please reselect!" Exit Sub End If
答案 1 :(得分:1)
您可以在工作表上引用带有VLOOKUP公式的已关闭工作簿。关闭工作簿之前,您需要存储一个字符串,该字符串代表该范围的完整限定路径。
由于您未指明ActiveCell是什么,因此请使用偏移量
Sub GetAmazonInventory()
Dim wbk As Workbook, addr as string
Set wbk = Workbooks.Open(FileName:=Application.GetOpenFilename, ReadOnly:=True)
addr = wbk.Worksheets(1).Range("A2:F900").address(external:=true)
wbk.Close
ActiveCell.formula = "=iferror(vLookup(" & ActiveCell.Offset(0, -12).address(0, 0) & _
", " & addr & ", 5, False), 20)"
End Sub