2

我想使用 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
4

2 回答 2

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
于 2018-10-27T00:00:23.277 回答
1

您可以在工作表上使用 VLOOKUP 公式引用已关闭的工作簿。在关闭工作簿之前,您需要存储一个表示该范围的完整限定路径的字符串。

由于您没有说明 ActiveCell 是什么并使用 Offset 来

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
于 2018-10-27T00:22:26.423 回答