【问题标题】:VBA reference to a table in different worksheetVBA引用不同工作表中的表
【发布时间】:2013-12-02 23:34:58
【问题描述】:

我正在尝试在 VBA 中使用 vlookup。

  1. Filename = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="请选择一个文件")
  2. Table1 = Sheet1.Range("A3:A7000") ' SiteID
  3. Table2 = [文件名]Sheet1.Range("A3:I13")
  4. Roww = Sheet1.Range("E2").Row
  5. Col = Sheet1.Range("E2").Column
  6. 对于 Table1 中的每个 cl
  7. Sheet1.Cells(Roww, Coll) = Application.WorksheetFunction.VLookup(cl, Table2, 1, False)
  8. 行 = 行 +1
  9. 下一个分类

我的问题是如何定义位于第 3 行不同工作表/文件中的表格?

【问题讨论】:

  • Workbooks("Filename").Sheets("Sheetname").Range("Range"),填写您各自的 wb、ws 和 range 应该可以解决问题。

标签: excel external definition vba


【解决方案1】:

您可以将工作簿、工作表和范围设置为 VBA 中的对象,并通过名称引用它们。

示例:

Sub test()

Dim filename As String
Dim fullRangeString As String

Dim returnValue As Variant
Dim wb As Workbook
Dim ws As Worksheet

Dim rng As Range

    'get workbook path
    filename = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls), *.xls", Title:="Please select a file")


    'set our workbook and open it
    Set wb = Application.Workbooks.Open(filename)

    'set our worksheet
    Set ws = wb.Worksheets("Sheet1")

    'set the range for vlookup
    Set rng = ws.Range("A3:I13")


    'Do what you need to here with the range (will get error (unable to get vlookup property of worksheet) if value doesn't exist
    returnValue = Application.WorksheetFunction.VLookup("test4", rng, 2, False)


    MsgBox returnValue
    'If you need a fully declared range string for use in a vlookup formula, then
    'you'll need something like this (this won't work if there is any spaces or special
    'charactors in the sheet name



    'fullRangeString = "[" & rng.Parent.Parent.Name & "]" _
                        & rng.Parent.Name & "!" & rng.Address

    'Sheet1.Cells(10, 10).Formula = "=VLOOKUP(A1," & fullRangeString & ",8,False)"




    'close workbook if you need to
    wb.Close False


End Sub

【讨论】:

  • 非常感谢您的回复,尝试了您的建议,已将其与 Sheet1.Cells(X,Y).FormulaR1C1 = "=VLOOKUP(RC[-4], rng, 10, False) 行一起使用”。宏正在执行而没有错误,但是,当检查单元格 X,Y 时,我可以在内容中看到“=VLOOKUP(A3, rng, 10, FALSE)”,并且 shell 显示 #NAME?你知道问题出在哪里吗?
  • 我的意思是我不应该在公式中看到实际范围而不是 rng 变量吗?
  • @taiko 如果您使用的是这样的范围字符串(而不是您第一次询问Application.WorksheetFunction.VLookup( 的方式,那么您需要使用类似于fullRangeString 的字符串(请参阅我的编辑) . 如果您的工作表名称中有空格,这可能会失败(因为在这种情况下,它们需要用 '' 括起来才能使范围正常工作)
  • 噢,我明白你的意思了。抱歉,我最初使用的是“Application.WorksheetFunction.VLookup”,但这给了我一个错误“无法获取 WorksheetFunction 类的 VLookup 属性”,所以我尝试了不同的方法,这显然也不起作用:(。我已经更新了我最初的问题,所以更清楚我想要实现的目标
  • @taiko 我已经更新了。这将在您指定的工作表中查找您指定的值(在我的情况下为“test4”),并返回它在旁边的 B 列中找到的值。如果该值不存在,您将收到错误消息。 (无法获取 VLOOKUP ......
【解决方案2】:

这应该可行:

Sub vLook()

Dim wb1 As Workbook
Dim wb2 As Workbook
Dim Range1, myValue
Set wb1 = ThisWorkbook
Set wb2 = Workbooks.Open("C:\Code\Book4.xlsx")

Range1 = wb2.Sheets(1).Range("A1:C5")
myValue = Application.WorksheetFunction.VLookup("Test", Range1, 2, False)

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多