2013-10-03 86 views
1

宏的一部分我刷新了與SQL(它運行查詢以將兩列數據放入選項卡中)的連接,並在數據(不同選項卡)由查詢生成的表上的現有列。由連接字符串生成的VBA查找表生成

'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,但並不成功。

任何想法,爲什麼它不工作?如何解決它?

謝謝。

回答

0

問題是在查詢仍在刷新時代碼仍在繼續,因此在有數據要搜索之前執行了查找。修復是禁用後臺刷新:數據 - > Connectons的 - >屬性 - >不使用'啓用後臺刷新'

0

最簡單的解決方案是讓公式只查看電子表格中較大的部分,而不僅僅是RwlID命名的範圍。

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

我以前試過,它只是返回空白,就像查找公式沒有被插入到預期的列在所有。 Range(「M2」)。Select ActiveCell.FormulaR1C1 = _「= IF(ISNA(VLOOKUP([@ polid],RenewedFromPolID!$ A $ 2:$ B $ 10000,2,FALSE)),[@ polid], VLOOKUP([@ polid],RenewedFromPolID!$ A $ 2:$ B $ 10000,2,FALSE))「 RenewedFromPolID是表的標籤的名稱...不知道是否有明顯的東西我不知道這裏? – user2842721

+0

關於這方面的一些更多信息:除了在桌面上做一個vlookup之外,我還要求代碼複製它,並將列A和B(包含表)粘貼到C和D中。這發生在連接刷新後代碼運行時間,大約一分鐘後,刷新需要幾秒鐘)。列C和D顯示錶格的舊版本。 – user2842721

+0

在連接上禁用背景刷新已解決了我的問題。我現在可以成功運行我的原始Vlookup。 – user2842721