VBAユーザフォームを非アクティブ固定にしたい

このQ&Aのポイント
  • エクセルVBAで作成されたプログラムで、処理の進捗を表示しているユーザフォームのフォーカスが移動してしまう問題があります。
  • 現在のコードでは、処理が進む度にユーザフォームにフォーカスが移るため、他の作業が不便です。
  • ユーザフォームの進捗表示を確認しながら、フォーカスが移動しないようにするコードを探しています。
回答を見る
  • ベストアンサー

VBA ユーザフォームを非アクティブ固定にしたい

エクセルVBAで作成されたプログラムで、一点改善したい点があります。 処理の開始を命令すると、ユーザフォームが出てきて進捗が「5/100が完了しました」のように 分かるようになっているんですが、処理が進み、この「5/100」の部分が更新される度に フォーカスがユーザフォームに移ってしまい、他の作業をしていると大変不便です。 ユーザフォームまわりのコードは以下のようになっています。 UserForm11.Show UserForm11.Label2.Caption = "処理実行中です。" & "(" & cnt1 & "/" & cnt2 & ")" 進捗を確認しつつ、かつフォーカスしないようにするようなコードはありませんでしょうか。

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

  • ベストアンサー
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

AppActivate Application.Captionで、エクセルに制御を戻せば良いと思います。 下記はご参考までに。 Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub test() Dim i As Long UserForm1.Show vbModeless For i = 1 To 10 Sleep 5000 DoEvents UserForm1.Label1.Caption = CStr(i) UserForm1.Repaint AppActivate Application.Caption Range("A1").Value = i Next i End Sub

nama2007
質問者

お礼

ありがとうございます!いただいたコードで思うような処理になりました!ありがとうございました。

その他の回答 (1)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

シートにテキストボックスを配置し、そのテキストボックス内に表示させるようにすればフォーカスが移ってしまうといったことは起きません。検討してみてください。

関連するQ&A

  • VBAでユーザーフォームの表示を確認

    VBAでユーザーフォームが表示されていなかったら UserForm1.Show vbModeless で表示させるようなプログラムを組みたいのですが 表示されているかどうかはそのようなコードで調べることができますでしょうか?

  • エクセル2003VBAにて、

    エクセル2003VBAにて、 ユーザーフォームのラベルへ処理状況を表示したいのですが、 マクロ実行中はユーザーフォームに処理が渡されないのか以下のコードが反映されません。 そこでDoEventsを入れてみたのですが、 やっぱりラベルに以下の文字が反映されません。 どなたかよい解決方法を御存じないでしょうか? 教えてください。よろしくお願いいたします。 DoEvents UserForm1.Label9.Caption = "行数確認中です..."

  • VBAでユーザーフォームのcaption表示

    VBAを初めたばかりです。 VBAでユーザーフォームを作成したのですが ユーザーフォームプロパティのcaptionで入力しても 下記プログラムで入力しても表示されません。 VBA作成時の画面にはしっかりと「項目」と 表示されていますが、プログラムを実行してユーザーフォームを 呼び出すと何も表示されていません。 ご教授ください。 Private Sub UserForm_Initialize() UserForm1.Caption = "項目" With ListBox1 .AddItem "1" .AddItem "2" End With End Sub

  • VBA ユーザーフォームを速く開く方法について

    VBA ユーザーフォームを速く開く方法について 現在Excel2000を使用しています。 VBAにてユーザーフォーム1と2を作成して、ユーザーフォーム1のコマンドボタンを押すと userform2.showが実行されてユーザーフォーム2が開きますが、フォーム2にはテキスト ボックスなどが約400個程設置してあり、そのせいかフォーム2が開くのに約8~10秒程かかり ます。 そこでそのフォームを速く開きたいのですが、(1秒~2秒程で)どうしたら速く開くでしょうか? Application.DisplayFullScreen = Falseなどを使用しても余り効果がありません。 パソコン自体の処理速度もあると思いますが、できるだけ速くしたいです。 よろしくお願いします。

  • ユーザーフォームの描画が遅れるのは?

    ExcelのVBAで簡単な処理をしているのですが、困っています。 ユーザーフォームにラベル1つとコマンドボタンを2つ用意しました。 ラベルには「・・・よろしいですか?」と質問形式の文章を 表示し、コマンドボタンにはそれぞれ「OK」と「キャンセル」を 表示してあります。 「OK」のコマンドボタンをクリックされたら、2つのコマンドボタン のvisibleプロパティをfalseにして隠し、ラベルには 「しばらくお待ちください。」と表示してセルの計算をさせます。 私の考えでは、コマンドボタンが消えラベルに「しばらく・・」が 表示されてから計算が行われセル上に計算結果が 表示されるはずなのですが、何故か計算結果が全て表示されてから コマンドボタンが消え、ラベルに「しばらく・・」と表示され 次の命令を実行してしまいます。 何がいけないのかが分かりません。 宜しくお願いいたします。 Private Sub CommandButton1_Click()  UserForm1.CommandButton1.Visible=False  UserForm1.CommandButton2.Visible=False  UserForm1.Label1.Caption="しばらくお待ちください。" '計算のsubへ飛ぶ  Call Keisan  UserForm1.Label1.Caption="終了しました。" End Sub

  • VBA:ユーザフォームのラベルの指定の仕方教えてください。

     今、ユーザフォームに20個のラベルがあります。それぞれのラベルは、条件によりラベルの表示内容が変更します。そこで、ラベルの表示変更が必要なときにすぐに変更できるようにしたいと考えています。しかし、例えば以下のようなコードを作成するとエラーになり困っています。  Label(i)で、iの番号によりラベルが呼び出されないだろうかと自分なりに作りましたがダメでした。以下のようなループ文中で特定のラベルを呼び出し処理することは不可能でしょうか?  やはり、UserForm1.Label3などのように番号をきちんと書かないとダメでしょうか?本当は、ラベルが82個ありその一つ一つにコードを割り当てるのが大変です。また、きれいなコードで書きたいと思うからです。宜しければ、ご教授願います。 -------------------------------------------- Sub セルの値をラベル表示する() For i = 1 To 20 With UserForm1.Label(i) .Caption = Cells(1, i) End With Next i End Sub

  • 複数のユーザーフォームをコマンドボタンにて表示・非表示させるには

    VBA勉強中のものです。 複数のユーザーフォームをコマンドボタンを使用して画面への表示切替を考えております。 例)ユーザーフォーム1,ユーザーフォーム2,ユーザーフォーム3のそれぞれにコマンドボタン1,コマンドボタン2,コマンドボタン3を作成し、   コマンドボタン1→ユーザーフォーム1を表示   コマンドボタン2→ユーザーフォーム2を表示   コマンドボタン3→ユーザーフォーム3を表示 とするようなことを考えおります。  そこで、下記のようにコードを作成したのでですが,一度表示させたユーザーフォームを再度表示させようとコマンドボタンをクリックしたら、「フォームはすでに表示させているのでモーダル表示はできません」とエラーがでてしまいます。   どなたか、どのようにしたらいいかご教授ねがいます。 サンプルコード) --------------------------------------------------- 'UserForm1のコード Private Sub CommandButton2_Click() Call UserForm2_show UserForm1.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm1.Hide End Sub ---------------------------------------------------- 'UserForm2のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm2.Hide End Sub Private Sub CommandButton3_Click() Call UserForm3_show UserForm2.Hide End Sub ------------------------------------------------------- 'UserForm3のコード Private Sub CommandButton1_Click() Call UserForm1_show UserForm3.Hide End Sub Private Sub CommandButton2_Click() Call UserForm2_show UserForm3.Hide End Sub ------------------------------------------------------------ '標準モジュール コード Sub UserForm1_show() UserForm1.Show End Sub Sub UserForm2_show() UserForm2.Show End Sub Sub UserForm3_show() UserForm3.Show End Sub

  • VBAにて、ユーザーフォーム上に設置したスプレッドシートを編集するコー

    VBAにて、ユーザーフォーム上に設置したスプレッドシートを編集するコード VBAにて、OMC?という機能を使ってユーザーフォームにスプレッドシートを複数設置しました。 このスプレッドシート上にあるデータを、エクセルシートに持ってくる事はできたのですが、スプレッドシートそのもののデータの追加、削除等が出来ません。 スプレッドシート→エクセルシートへのデータ移動はこのようなコードを使っています。これは問題なく動きました。 Sheets("DB").Range("H1").Value = UserForm1.Spreadsheet2.Range("A" & cnt).Value ですが、逆に UserForm1.Spreadsheet2.Range("A" & cnt).Value = Sheets("DB").Range("H1").Value としても、エラーは出ませんが反映されないようです。 やりたい事は、スプレッドシートのある範囲の値をクリアしたいというもので UserForm1.Spreadsheet1.Range("B10:H22").Select Selection.Clear このように設定したのですが、やはり反映されません。 ユーザーフォーム上のスプレッドシートを編集するには、何か特別なコーディングが必要なのでしょうか?

  • マクロ実行時、ユーザーフォームにラベルのテキストが表示されません。

    エクセル2003VBAで、マクロ実行時にユーザーフォームを モードレス表示して、そのユーザーフォームにラベル「マクロ実行中です・・・」を貼り付けています。 しかし、処理が追いついていないのか、そのラベルが表示されません。 ユーザーフォームにはコードを記述していません。コードは以下のみです。 UserForm1.Show vbModeless テキストをTrueにしてからマクロ処理のようなコードがあるのでしょうか? お手数をおかけしますが、解決方法をご存知の方よろしくお願いいたします。

  • エクセル VBA ユーザーフォームを閉じる

    ユーザーフォームを開く時は UserForm1.Showですが 閉じる時は? UserForm1.Close だとコンパイルエラーになります。 End にするしかないですか?

専門家に質問してみよう