VBAでExcelの外部取込みデータの更新を行っているのですが、思う通りに動作せず悩んでいます。
初心者なので分かりづらいかもしれませんが、お読み頂き助言いただけますと助かります。

■やっていること
 1)あるExcelの表(アンケート結果)を、別のファイルにMS-Queryで取り込んでいます
 2)データ元のファイルは毎月更新され、ファイルパスが変わるので、取り込み側で都度「ブックの接続」プロパティを手で書き換え、取り込み直しています。
 3)取り込んだ表の「サービス」列中の値に「×」があったら、そのセルを赤く塗り潰しています。
 →毎月の2)と3)に相当するマクロを作ったのですが、取り込みはできるものの、塗り潰す所がうまくいきません。

■取り込んでいる表のイメージ
番号  提供時間  料理の味  雰囲気 サービス
---------------------------------------------------
A001   ○     ○     ○   △
A002   ○     ○     ○   ○
A003   ×     △     △   ×

■マクロ
※取り込んだ外部データ範囲のテーブル名:「T_アンケート結果チェック」
※別の作業の一環で、このマクロ実行前は値はすべて「×」以外になってます

Sub アンケート結果チェック()

Dim sConFile As String
Dim LO As ListObject
Dim C As Range

'処理1:接続先ファイルを選択
sConFile = Application.GetOpenFilename(Title:="今月のアンケート結果ファイルを選択してください")
If sConFile = "False" Then Exit Sub

'処理2:接続情報のDBQ(ファイルパス)を選択したファイルに変更してデータ更新
ThisWorkbook.Connections("con_アンケート結果").ODBCConnection.Connection _
= "ODBC;DSN=Excel Files;DBQ=" & sConFile &
";DefaultDir=Z:\アンケート;DriverId=1046;MaxBufferSize=2048;PageTimeout=5;"
ThisWorkbook.Connections("con_アンケート結果").Refresh

'処理3:サービス列に「×」があったらセルを赤く塗りつぶす
Set LO = ThisWorkbook.Sheets(1).ListObjects("T_アンケート結果チェック")
For Each C In LO.ListColumns("サービス").DataBodyRange
If C = "×" Then C.Interior.Color = vbRed
Next C

End Sub

■状況
 ・取り込んだデータの「サービス」列中に「×」があっても赤くならない
  →処理2のRefreshメソッド実行時点では、Excel画面上のデータは更新されず、
   そのため処理3のIF文の判定はすべてfalseになってしまう
 ・プロシージャが終了した時点で、Excel画面の表示も取り込んだ内容に更新される
 ・処理3の前にブレークポイントを設定して、マクロを一時停止した状態で
  Excelウィンドウをクリックすると、その時点でデータの表示は更新される
  →したがって実行を再開すると、想定通り×のところに色がつく

■質問
 ・処理3に入る前にExcelシート上のデータを更新するには、どんなコードを書いたら良いのでしょうか。

なお塗り潰しだけなら「条件付き書式」でできるよ、ということは承知しています。
(話を単純化してますが、実際は「×」判定後もっと色んな処理をしています)
今回はあくまで、「外部データ更新をプロシージャ実行中にセルに反映する方法」を知りたいと考えています。

長文申し訳ございません。よろしくお願いいたします。

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (1件)

推測ですが、「処理2」は、マルチスレッドで動いているのが原因ではないでしょうか?



試しに、処理1の前に
 Application.MultiThreadedCalculation.Enabled = False
にしてみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
処理1の前に、この一行を入れてみたのですが、残念ながら状況は変わりませんでした。

お礼日時:2017/11/16 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング