• ベストアンサー

”お待ち下さい”が表示できない。

 WinXp+VB6sp2+Access2002で開発しています。 やや時間のかかる処理の際、サブ画面Frm_Msgを表示し、画面上の ラベル.Captionに"対象抽出中です。少しお待ち下さい。"とセット。次行で Frm_Msg.Show (以下抽出処理) として、ユーザーのストレスを抑えようとしています。 …が、サブ画面Frm_Msgの”枠”部分は表示されるものの、 肝心のメッセージ部分が透けて表示されない事が起きています。  メッセージが表示される迄の時間をループやタイマーで稼ぐ以外に回避する 方法は有りませんでしょうか。 上記の方法は全体の処理時間を延ばしてしまう為、出来れば使用したくない と考えています。ご存知の方がいらっしゃいましたら宜しく御願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • momoturbo
  • ベストアンサー率55% (49/88)
回答No.2

ラベル.Caption="対象抽出中です。少しお待ち下さい。" DoEvents Frm_Msg.Show DoEvents DoEventsを入れてみてはいかがでしょうか? どちらか片方でいいと思います。

Adenau
質問者

お礼

 これはシンプルに解消できますね。 有難うございました。

その他の回答 (1)

  • 2ch
  • ベストアンサー率51% (64/125)
回答No.1

Load Frm_Msg Frm_Msg.AutoRedraw = True Frm_Msg.Label1.Caption = "待て" Frm_Msg.Show Frm_Msg.Refresh

Adenau
質問者

お礼

お蔭様でさっくり解消致しました。 知らなかったプロパティの勉強にもなりました。 有難うございます。

関連するQ&A

  • 処理中メッセージの文字が表示されない

    【処理概要】作表するダータをCSVファイルへ書き込み、後にEXECELファイルへ貼り付けし、印字する処理。 【事態】CSVファイルへの書き込み前に、「只今作票中です。しばらくお待ち下さい。」のメッセージをボックスに編集したが、IO処理にメモリが取られボックスだけが表示されメッセージ文字が編集されない事態が生じています。 回避策をお教え願います。 【スペック概要】 Frm_Msg.Lbl_ViewMsg.Caption = "只今作票中です。し              ばらくお待ち下さい。" Frm_Msg.Show Syorisw = 1 'CSVファイルオープン Call CSVout DB_Open 'DBオープン Call DB_Read 'DBを読みレコード出力 Call DB_Close 'DBクローズ Syorisw = 9 'CSVファイルクローズ Call CSVout Frm_Msg.Hide 以降 プレビューして印字処理する。

  • タイマーの使い方

    VB初心者です(6.0を使っています) タイマーの使い方がよく分かっていません。 ボタンを押してからの経過時間をラベルに表示させたいと思っているのですが、 ----------------------------------------------- Private Sub Command1_Click()   Timer1.Interval = 1000   処理1   処理2    ・    ・    ・   Timer1.Interval = 0 End Sub Private Sub Timer1_Timer()   Label1.Caption = [経過時間] End Sub ----------------------------------------------- という感じに書いていると、[処理1]~をしている間はラベルが表示されなくて、 最後の[処理]が終わった直後の[経過時間]のみが表示されます。 こういう形ではタイマーは使用できないのでしょうか? 他のWebサイトなども調べてみたのですが、解決できませんでした。 どなたか教えていただけませんでしょうか?

  • フォームのアクティブと非アクティブ表示について

    Form1からForm2を表示するという処理を以下のようにコーディングしてみました。 **Form1.frm*** Private Sub Command1_Click() Form1.Hide Form1.vbModal Form1.Show End Sub **Form2.frm*** Private Sub Command1_Click() Unlaod Me End Sub 画面にエクスプローラ等のウィンドウが表示されているときに、Form2を表示させようとすると非アクティブ状態で表示されてしまいます。 また、Form2をUnloadするとForm1が表示されるのですが、その際に、Form1のタイトルと、タスクバーに表示されているボタンが反転した後非アクティブ状態になってしまいます。 フォームは常にアクティブで表示させたいのですが、どうすればよいのでしょうか?

  • 並列処理させる方法を教えてください。

    VB6(SP3) OS:Windows200で並列処理させる方法を教えてください。 以下の並列処理を別画面で行いたいのですが、どうしたらよいでしょうか? 並列処理の内容 1.DBへデータのロード(親フォームのボタンで実行) 2.1の処理状況(ログ)を子画面で表示(親フォームのボタンが押されたら、子 フォームとして起動する) ログを表示する画面は、共通部品として使用したいため、 ログの出力を直に書きたくありません。 以下は、当然、動かないんですけど、動かしたいイメージです。 Fom1.frm、Module1.bas、Form2.frmは、同じプロジェクトに 存在します。 =============Form1.frm============= Private Sub Command1_Cpralick() call DataLoad() end sub Public Sub InsertData() Form2.LogOut("XX件目を書き込んでいます。") '・・・データをインサートする処理 end sub =============Module1.bas============= private sub DataLoad() Call Form2.Show(vbModal, Form1) '※1 'DB書込み Call Form1.InsertData() '書込み結果 Form2.LogOut("成功しました。") Form2.hide end sub =============Form2.frm=============== Public Sub LogOut(LogMsg As String) Form2.lbl_Log.Caption = LogMsg End Sub Module1.basの中の※1で処理がForm2に移ってしまい、 Module1.basの※1以下の処理が当然実行されません。 また、前述しました通り、Form2.frmは使いまわししたいので、 Form2.frmにはこれ以上コードを書きたくありません。 Form2は、一応モーダルで起動したいです。 ご教授よろい敷くお願いします。

  • WEB画面でAccessテーブルを表示したい

    よろしくお願いします。 WEB画面上で入力された年月日範囲を Accessテーブルのデータから表示させたいのですが よろしくお願いします。 【Accessテーブル】 ----------------------------- │ USER │ 年月日 │  内容 │ ----------------------------- │000001│20090401│?????????│ │000002│20090402│?????????│ │000003│20090403│?????????│ │000004│20090404│?????????│ │000005│20090405│?????????│ │000006│20090406│?????????│ │000007│20090407│?????????│ ----------------------------- 【WEB画面】 年月日【20090401】~【20090405】   [表示ボタン] 【Accessテーブル】 ----------------------------- │ USER │ 年月日 │  内容 │ ----------------------------- │000001│20090401│?????????│ │000002│20090402│?????????│ │000003│20090403│?????????│ │000004│20090404│?????????│ │000005│20090405│?????????│ │ │ │ │ │ │ │ │ ----------------------------- 【処理の流れ】 (1)画面上に年月日を入力する (2)ボタンを押す (3)WEB画面に抽出されたデータが表示される 【条件】 ・AccessVBAは使わない ・Accessクエリは使わない ・HTMLファイルにSELECT文で書いて抽出したい 【わからないこと】 ・Accessテーブルのデータを表示する場合にHTMLのFORMは何がいいのでしょうか?   表示されるデータ量は1万件以上の場合があります。 ・ボタンを押したときに表示したいのですがAccessを自動起動して 抽出し表示になるのでしょうか? わからないことだらけですがよろしくお願いします

  • V.B.6 多重Call用スプール作成等について。

    複数のタイマー割り込み(A,B,C,...)が存在する時 各割り込みルーチンから共通のライブラリ Eesasa を使用する場合 Visual Basic 6.0 SP5 内部ルーチンにおける資源の取り扱いに関する ヘルプファイルの内容を読みたいのですが、検索語がわかりません。 対応するヘルプファイル名又は適切なシソーラスをお教えください。 想定するルーチンは以下のとおりです。 ファイル a.frm, b.frm, c.frm,... Private Sub Form_load Timer1.Enabled=True end sub Private Sub Timer1_Timer() IF (適当な条件) then call Eesasa end sub ファイル EesasaSub.Bas sub Eesasa  (適当な処理) end sub A.frm,...と EesasaSUB.bas は同一プロジェクトに属します。 Eesasa の処理中に別の割り込みがかかった場合後から発生した割り込みがEesasaを参照することについて Eesasa 内で待ちループをかけるか Eesasa の入り口ではじき各Frmファイル内で待ちループをかけるか Eesasa とは別名の短時間処理ルーチンを作成しフラグを返す。各Frmファイル内で待ちループをかけるか Eesasa 処理中のフラグを EsasaSub.bas 内にもてるか レジストリ等外部資源に保存する必要があるか 別タスクにして EEsasa.exe を起動する(http://oshiete1.goo.ne.jp/kotaeru.php3?q=727770等)必要があるか。 ユーザー側が上記のような資源の占有・解放を宣言し待ちルーチンを作成するか Visual Basic 6.0 SP5 が  資源関係を意識しないで済むような処理になっているか  専用の資源占有開放命令を持っているか がわからないのです。 Eesasa の処理終了まで割り込みを禁止する方法は使えません。 Eesasa の処理に1回あたり短いもので1-3秒・長いもので3-8時間かかります。 しかも中断処理が存在します(10分以上長い処理に付き合いきれないので処理を中断して待ち行列の最後につなぎたい)。

  • Q:Ecvel 2007 VBA: 長い処理の間のメッセージ?

    いつもお世話になります。 ユーザーフォームの下にラベルを置いて、ステータスバー的に使っています。 ちょっと時間が掛かる処理があることが分かったので、その間は「処理中・・・」的なメッセージを出すことにしました。 現在は以下のようなプログラムにしています。 Option Explicit Private Sub CommandButton1_Click() setColor1 '<==Break? setcolor2 Dim i As Long For i = 2 To 10000 Cells(i, 5).Value = "wanwan" Next i setcolor3 End Sub Sub setColor1() With UserForm1.Label1 .Caption = "you push the button..." .ForeColor = RGB(0, 255, 0) End With End Sub Sub setcolor2() With UserForm1.Label1 .Caption = "wait for a while..." .ForeColor = RGB(255, 0, 0) End With End Sub Sub setcolor3() With UserForm1.Label1 .Caption = "Finished" .ForeColor = RGB(0, 0, 0) End With End Sub これを実行しても、Forループの間はLabel1のCaptionはフォームデザイン時のデフォルト値Beforeになったままで、Forループが終わるとsetcolor3によってセットされるFinishedになります。 setcolor1、setcolor2が表示する途中経過は見えません。 しかし、上のリストの Break? と書いているところにブレークポイントを置いて、ブレークしたらF8を連打してsetcolor1、setcolor2を手動実行するとメッセージは狙い通りに変わります。 Forループの中でワークシートに何らかの操作を行っている場合にのみ起こる現象で、Forループの中でwait文を書いて10秒待つとかやると、メッセージは狙い通りに変わります。 ワークシートを処理しながら、メッセージを狙い通りに変える方法はあるでしょうか。 何かわかりましたらよろしくお願いします。 なお、ユーザーフォームの画像を添えます。

  • モードレスダイアログのタブ移動

    メインループでメッセージを拾ってモードレスで表示した画面のTabキー制御を行いたいのですが、以下のプログラムでTabキーはコントロール間を移動しますが、移動の順番がタブオーダーと全く違います。 ------------------------------------------------- // メイン ウィンドウを作成して、実行します Form1^ m_form = gcnew Form1(); m_form->Show(); msg.message = WM_CREATE; while (msg.message != WM_QUIT) { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { if (!IsDialogMessage( (HWND)m_form->Handle.ToPointer(), &msg )) { // メッセージが未処理の場合は処理を行う TranslateMessage(&msg); DispatchMessage(&msg); } } } ------------------------------------------------- m_form->ShowDialog(); にしたり、上記ループを Application::Run(gcnew Form1()); に変更するとちゃんとタブオーダーの順番で移動します。 訳有りで、ループ処理を変えたくはありません。 ネットで調べる限りタブ移動について「IsDialogMessage」を 入れるという疑問はあったのですが、それ以降の動作については 何も書かれていないようです。 上記ループの書き方でタブ移動がうまく行えない場合が あるのでしょうか? どなたかご存知でしたら教えてください

  • Access-フォームのCaption変更

    お願い致します。 Access97のフォームのクラスモジュールでCaptionの変更を行うコードを書いたのですが、いまいちうまくいきません。 ご指導お願い致します。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓ *********************************************** Private sub Form_Load() DoCmd.OpenForm "F_OPEN" Forms!F_OPEN!Msg.Caption="お待ちください" ************************************************ このForms!F_OPEN!Msg.Caption="お待ちください" のところで、エラーメッセージ 「'Item'メソッドは失敗しました:'Forms'オブジェクト」がでてしまうのです。 お願い致します。

  • エクセル2007で自前のツールバーを作る方法

    エクセル2000です。 以下のマクロで自前の新しいツールバーが作れ、作動します。 ところがエクセル2007ではうんともすんとも言ってくれません。 エクセル2007で使う場合はどのようにしたらよいでしょうか? ユーザーフォームで似たようなものを作る方法はわかるのですが、できれば以下の方法を使いたいのです。 Sub 三択メニュー() On Error Resume Next Application.CommandBars("選択します").Delete On Error GoTo 0 Application.CommandBars.Add Name:="選択します", Position:=msoBarFloating With Application.CommandBars("選択します") .Visible = True .Controls.Add Type:=msoControlButton With .Controls(1) .Style = msoButtonCaption .Caption = "⇒メニュー1 " .OnAction = "Msg_1" End With .Controls.Add Type:=msoControlButton With .Controls(2) .Style = msoButtonCaption .Caption = "⇒メニュー2 " .OnAction = "Msg_2" End With .Controls.Add Type:=msoControlButton With .Controls(3) .Style = msoButtonCaption .Caption = "⇒メニュー3 " .OnAction = "Msg_3" End With End With End Sub Sub Msg_1() Application.CommandBars("選択します").Delete MsgBox "追加コマンド1を処理しました。" End Sub Sub Msg_2() Application.CommandBars("選択します").Delete MsgBox "追加コマンド2を処理しました。" End Sub Sub Msg_3() Application.CommandBars("選択します").Delete MsgBox "追加コマンド3を処理しました。" End Sub