连接字符串生成的表上的VBA vlookup

时间:2013-10-03 13:01:13

标签: excel vba excel-vba vlookup

宏的一部分我已刷新与SQL的连接(运行查询以在选项卡中放置两列数据)并在由表生成的表中的现有列中执行带有数据(不同选项卡)的vlookup查询。

'Refreshing Connection named Query From Warehouse
ActiveWorkbook.Connections("Query from Warehouse").Refresh

Range("M2").Select
ActiveCell.FormulaR1C1 = _
    "=IF(ISNA(VLOOKUP([@polid],RwlID,2,FALSE)),[@polid],VLOOKUP([@polid],RwlID,2,FALSE))"

查询创建的表名为RwlID

我遇到的问题是vlookup仅适用于已经在RwlID中开始的数据。我想也许这种情况正在发生,因为它在连接完成刷新之前正在继续,所以我在宏中的其他查询的任一侧移动了两段代码(这需要花费更长的时间才能运行)但是这没有用。

现在我认为Excel仍然认为RwlID只有一定的长度。因此,例如昨天它是400行,今天延伸到450,我的查找只有400。 (仅在宏中,就像我在宏运行后再次手动输入查找一样,按照我的预期填充单元格)

所以我尝试添加(RlwID在表5中):

    sheets(5).ListObjects(1).Name = "RwlID"

认为它可能将450的表重命名为RwlID而不是400,但是没有成功。

任何想法为什么它不起作用?如何解决?

感谢。

2 个答案:

答案 0 :(得分:0)

最简单的解决方案是让您的公式查看电子表格的更大部分,而不仅仅是RwlID命名范围。

"=IF(ISNA(VLOOKUP([@polid],$A$2:$B$2000,2,FALSE)),[@polid],VLOOKUP([@polid],$A$2:$B$2000,2,FALSE))"

答案 1 :(得分:0)

问题是在查询仍在刷新时代码仍在继续,因此在搜索数据之前已执行vlookup。修复是禁用后台刷新:数据 - > Connectons - >属性 - >取消勾选'启用后台刷新'