アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAのUserformのボタンを押すことによってwebクエリを取得という形を希望しているのですが、
以下のようにコードを設定した場合、Button1をクリックしただけではずっと”取得中”という文字が表示されるだけで何も動きはありません。

そこで、フォーム自体を×ボタンで消すと、その直後にwebクエリのデータが指定のシートに反映されます。



Private Sub CommandButton1_Click()
'Webクエリ作成
'WebSelectionType = xlAllTables

With ActiveSheet.QueryTables.Add( _
Connection:="URL;http://www.yahoo.co.jp", _
Destination:=Worksheets("abc").Cells(1, 1))

.WebSelectionType = xlAllTables '既定値

.Refresh
End With



End Sub


なぜフォームを消さないとシートに反映されないのでしょうか?
ボタンを押すだけで即座に反映され、その後も作業を続けられるようにしたいので、方法を教えてください。
よろしくお願いします。

A 回答 (1件)

>.Refresh


.Refresh BackgroundQuery:=False

Refreshメソッドの引数BackgroundQueryを指定してください。
現状はデフォルトのBackgroundQuery:=Trueになっているのでしょう。
Refreshメソッドのヘルプ<引用>
..クエリが実行されると直ちに制御をプロシージャに返す場合は True を設定します。
QueryTables はバックグランドで更新されます。
すべてのデータをシートに取り出した後でのみ、制御をプロシージャに返す場合は False を設定します。
</引用>

モーダルのUserformの場合、
BackgroundQuery:=Trueでクエリ実行命令を出して、シート上に結果が表示されないまま、
Userformに制御が返ってしまうと、Userformを開いている間はシート上のデータ更新が待機状態になります。
BackgroundQuery:=Falseだと、シート上のデータ更新後にUserformに制御が返ります。

Userformがモードレスの場合はBackgroundQuery:=Trueでもデータ更新されます。

BackgroundQuery:=Falseにするか、UserformをvbModelessにするか、で対応できます。
    • good
    • 0
この回答へのお礼

完璧な解決法でした。
自力では見つけられない情報だったと思います。
助かりました ありがとうございます。

お礼日時:2012/03/24 21:07

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