- ベストアンサー
処理中メッセージを出しておきたいのですが
ある処理を実行するのに実行中ユーザーフォームで%表示をして終了と同時に閉じるVBAを・・コードは次のようにしています。 Sub 転記() Dim strCode As String Dim rngSA As Range Dim rngFC As Range strCode = Application.InputBox("受付番号は", "番号の入力", Type:=2) UserForm2.Show vbModeless 'キャンセルの場合の処理 If UCase$(strCode) = "FALSE" Then Exit Sub '受付番号の検索範囲を取得 With Sheets("sheet") Set rngSA = .Range("A1", .Range("A65536").End(xlUp)) End With '受付番号の検索範囲から入力された受付番号を探す Set rngFC = rngSA.Find(What:=strCode, LookAt:=xlWhole) '該当する受付番号が無ければ警告を表示して終了 If rngFC Is Nothing Then MsgBox "番号がありません!", vbOKOnly Or vbCritical, "エラー" Exit Sub End If '該当番号があった場合、氏名等転記 With Sheets("sheet2") .Range("F31").Value = rngFC.Offset(0, 4).Value 'TEL .Range("F29").Value = rngFC.Offset(0, 1).Value '氏名 End With '後始末:変数をクリア Set rngFC = Nothing Set rngSA = Nothing 'メッセージ用のユーザーフォームを閉じる UserForm2.Hide '転記成功メッセージを表示 MsgBox "終わりました。", vbInformation End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
hirosatonn さんへ >コードなど載せないで、簡単に質問すればよかったと反省しています。 こうしたテクニックは知っていてもある程度の経験のある人は、テクニックと実際の実務とどちらを取るかというと、実際の実務になってしまいます。某有名なExcelアドインなどは、確かにプログレスバーなどもついていて、見栄えがいいので、初心者「ウケ」をするようなのですが、そのコードを知っている身になると、メモリ食いのExcelに贅沢なものは要らない、ということが、優先してしまいます。これも、知っているからこその拒否反応のようなものなのですね。 ところで、プログレスバーというのは、Excel VBAの場合は、ラベルを代用して色を変えるだけなんです。VBのように、専用のコントロールがあるわけではありません。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=405615 の#3 の方は、ネットの引用のルールからしたら、その元を書かなくてはならないはずです。それは、ここにあります。 『かんたんプログラミング Excel VBA コントロール・関数編』大村あつし著 (技術評論社) 第二章の中の、「ラベルをプログレスバーとして利用する」 >コマンドボタンを押さないでUserFormが現われた状態では駄目なんでしょうね。 上記のものをそっくり写して、UserForm_Initialize() イベントで動かせばよいです。 %表示をプログレスバーの中に入れるなら、下側になるラベルにでも、Caption で表示させれば良いと思います。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 ふつうは、処理中やプログレスバーの表示というのは、Userform 設定時に、ちょうど、フリーズした状態にみえるので、それでつけるわけです。それで、 コードの内容からして、仮に時間が掛かったとしても、たかが数秒のことで、それで、%(パーセンテージ)表示が必要な部分があるのか疑問に感じています。私も、かつてプログレスバーで使ったことがあるけれど、最終的には、単に、テキストボックスに、「読み込み中」の表示を出すだけで終わってしまいました。 どこに、時間が掛かって、「処理中」の表示が必要なのか、お分かりになりますか? プロシージャ名に「転記」とありますから、ループするのだろうと思いますが、それが書かれていません。今のままのコードでは、%(パーセンテージ) やプログレスバーをつける余地がありません。
補足
いつも未熟な私の質問に色々とお答え頂きありがとうございます。 ご指摘のとおり今回のコード(だいぶ省略していますが)ではほとんど必要の無いのですが、別のVBA処理の中でUserForm2.Show vbModeless を使っており、「お待ちください・・・」と表示されるだけなのでプログレスバー(今回皆さんからのご指導ではじめて知りました。)で%表示がでないかなと思った次第です。 コマンドボタンを押さないでUserFormが現われた状態では駄目なんでしょうね。 コードなど載せないで、簡単に質問すればよかったと反省しています。
- 0shiete
- ベストアンサー率30% (148/492)
プログレスバーを表示させたいのでしょうか? 下記をどうぞ
お礼
URLありがとうございます。大変参考になりました。
- hana-hana3
- ベストアンサー率31% (4940/15541)
処理内容としてはそのようなメッセージを表示させるほどの時間が掛かるような事は無いと思いますが・・・。 何が出来ないのでしょうか?
お礼
はい。すみません。そのとおりです。 UserFormを出した時に%がでないかなと思いまして。 質問の意図が分かりづらいコードの載せまして、ごめんなさい。 お答え頂きありがとうございました。
お礼
返事が遅れましてすみません。だいたい思っていたようなものが出来ました。いつも感謝しています。
補足
>UserForm_Initialize() イベントで動かせばよいです 未熟なのでよく分かっていませんが、標準モジュールでの処理?ですかネ。 馬鹿な質問ですみません。