1

私が持っているマクロの一部は、SQL への接続を更新し (2 つの列のデータをタブに配置するクエリを実行しています)、クエリによって生成されたテーブルの既存の列のデータ (別のタブ) で 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 にあるデータに対してのみ機能していることです。接続の更新が完了する前に移動していたため、これが起こっているのではないかと思ったので、マクロ内の他のクエリの両側に2つのコードを移動しました(実行にはるかに時間がかかります)が、それは助けにはなりませんでした。

今、私は Excel がまだ RwlID が特定の長さだけであると考えていると考えています。たとえば、昨日は 400 行でしたが、今日は 450 行になりましたが、ルックアップは 400 しかありません。 (マクロのみで、マクロを実行した後に手動でルックアップを再度入力すると、期待どおりにセルが入力されます)

だから私は追加しようとしました(RlwIDはシート5にあります):

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

450 のテーブルの名前を 400 ではなく RwlID に変更するかもしれないと考えましたが、成功しませんでした。

それが機能しない理由はありますか?修正方法は?

ありがとう。

4

2 に答える 2

0

問題は、クエリがまだ更新されている間もコードが続行されているため、検索するデータが存在する前に vlookup が実行されたことです。修正は、バックグラウンド更新を無効にすることです: データ -> 接続 -> プロパティ -> 「バックグラウンド更新を有効にする」のチェックを外します

于 2015-04-26T13:58:15.367 に答える
0

最も簡単な解決策は、RwlID という名前の範囲だけではなく、スプレッドシートのより大きなセクションを数式で参照するようにすることです。

"=IF(ISNA(VLOOKUP([@polid],$A$2:$B$2000,2,FALSE)),[@polid],VLOOKUP([@polid],$A$2:$B$2000,2,FALSE))"
于 2013-10-03T13:24:35.480 に答える