当源是QUERY TABLE(或ListObject)时EXCEL VBA VLOOKUP

我被卡住了,我曾经运行一个代码,执行一个查询从查询​​(数据从networking电源查询) – 请参阅下面的代码示例)。 这一切都运行平稳,直到我试图添加更多的查询,然后我需要更改函数来执行从各种查询的查找,为此,我需要的查询名是一个变种。 无论我尝试什么,它都不适用于我( 在vlookup中replace“美国” ):

Function doVlookup(selectedSheet As String) Dim queryName As ListObject Set queryName = Worksheets("US API").ListObjects(1) Debug.Print queryName.Name Sheets(selectedSheet).Select Range("A1").Select Selection.End(xlToRight).Select ActiveCell.Offset(0, 1).Columns("A:A").EntireColumn.Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(1, 0).Select ActiveCell.FormulaR1C1 = "=IF(VLOOKUP(RC1,US,5,0)<>0, VLOOKUP(RC1,US,5,0),""-"")" ActiveCell.Offset(-1, 0).Select ActiveCell.FormulaR1C1 = "=TODAY()" ActiveCell.Offset(0, -1).Select Selection.End(xlDown).Select ActiveCell.Offset(0, 1).Select Range(Selection, Selection.End(xlUp)).Select Selection.FillDown Selection.End(xlUp).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False Application.CutCopyMode = False Range("A1").Select End Function 

var queryName,确实有所需的表,但是当我运行代码时,它只是返回#NAME! 为所有关键字。 如果我硬编码回“美国”(在这个例子中,它是硬编码),它运行没有问题。 我试过了:

  • queryName
  • 范围(queryName)
  • queryName.Range
  • !queryName R1:R100
  • queryName.Range.Select
  • queryName.DataBodyRange

澄清“查询名称”假设replace“美国”在下面: "=IF(VLOOKUP(RC1,US,5,0)<>0, VLOOKUP(RC1,US,5,0),""-"")"只是我不确定它是如何完成的。 “US”是从“从web上的数据”到表“US API”的连接加载的表的名称。

任何想法应该打赌在硬编码的美国的地方使之工作?

我意识到这是事实的一个月后,你可能会转移到更大更好的东西,但我想我可能知道如何解决这个问题。 下面是一个简单的电子表格和VBA代码的例子,它将在不同的listobjects上实现一个vlookup。

在这里输入图像说明

在这个例子中,我使用了G7-9的每个查找中第一个,第二个和第三个表(listobjects)的相应表值,只是为了说明如何dynamic声明每个表。

 Dim lo As ListObjects Set lo = ActiveSheet.ListObjects Range("G7").FormulaR1C1 = "=VLOOKUP(RC[-1]," & lo(1).Name & "[#All],2,FALSE)" Range("G8").FormulaR1C1 = "=VLOOKUP(RC[-1]," & lo(2).Name & "[#All],2,FALSE)" Range("G9").FormulaR1C1 = "=VLOOKUP(RC[-1]," & lo(3).Name & "[#All],2,FALSE)" 

我怀疑上面的代码中缺less的链接是listobject名称后面的[] ,表示要使用的表内的范围。