私は多くのものを作るマクロエクセルを持っています。それらの 1 つは、(ADODB.Connection を介して) クエリを実行することです。クエリは長く続く可能性があるため、次のようにします。
- 「クエリ 3 を実行しています」(たとえば) というモーダル情報ダイアログを、ボタンなしで表示します (ユーザーが閉じることはできません)。ユーザーに対してはブロックする必要がありますが、マクロに対してはブロックしないでください。
- クエリを実行します。
- 情報ウィンドウを閉じます。
擬似コード:
dim cn as new ADODB.Connection
dim rs as new ADODB.Recordset
dim dia as InfoDialog
set dia = new InfoDialog "running query 3"
cn.Open cn_string
rs.Open query_string, cn, ...
dia.close
新しいライブラリをインポートする必要のないソリューションを希望します (vba エディター > ツール > 参照)。たとえば、'CreateObject("WScript.Shell")' のようなものを使用します。不可能な場合は、ライブラリのインポートも歓迎します (ユーザーのコンピューターにインストールする必要がないため、標準ライブラリが望ましい)。
更新: Kenda の提案に従って、ラベル「Label1」を持つ userForm 「InfoDialog」を作成し、使いやすくするために 2 つのライブラリ関数を作成しました。
sub show_info(text as string)
InfoDialog.Label1.Caption = text
InfoDialog.Show
DoEvents
end sub
sub close_info()
InfoDialog.Hide
end sub
だから今私は書くことができます:
show_info "Connecting to db ..."
cn.Open cn_string
show_info "Running query ..."
rs.Open query_string, cn, ...
close_info