dポイントプレゼントキャンペーン実施中!

ある処理を実行するのに実行中ユーザーフォームで%表示をして終了と同時に閉じる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

A 回答 (4件)

hirosatonn さんへ



>コードなど載せないで、簡単に質問すればよかったと反省しています。

こうしたテクニックは知っていてもある程度の経験のある人は、テクニックと実際の実務とどちらを取るかというと、実際の実務になってしまいます。某有名なExcelアドインなどは、確かにプログレスバーなどもついていて、見栄えがいいので、初心者「ウケ」をするようなのですが、そのコードを知っている身になると、メモリ食いのExcelに贅沢なものは要らない、ということが、優先してしまいます。これも、知っているからこその拒否反応のようなものなのですね。

ところで、プログレスバーというのは、Excel VBAの場合は、ラベルを代用して色を変えるだけなんです。VBのように、専用のコントロールがあるわけではありません。

http://oshiete1.goo.ne.jp/kotaeru.php3?q=405615

の#3 の方は、ネットの引用のルールからしたら、その元を書かなくてはならないはずです。それは、ここにあります。

『かんたんプログラミング Excel VBA コントロール・関数編』大村あつし著 (技術評論社)
第二章の中の、「ラベルをプログレスバーとして利用する」

>コマンドボタンを押さないでUserFormが現われた状態では駄目なんでしょうね。

上記のものをそっくり写して、UserForm_Initialize() イベントで動かせばよいです。
%表示をプログレスバーの中に入れるなら、下側になるラベルにでも、Caption で表示させれば良いと思います。

この回答への補足

>UserForm_Initialize() イベントで動かせばよいです
未熟なのでよく分かっていませんが、標準モジュールでの処理?ですかネ。
馬鹿な質問ですみません。

補足日時:2005/07/13 21:00
    • good
    • 0
この回答へのお礼

返事が遅れましてすみません。だいたい思っていたようなものが出来ました。いつも感謝しています。

お礼日時:2005/07/23 14:09

こんばんは。



ふつうは、処理中やプログレスバーの表示というのは、Userform 設定時に、ちょうど、フリーズした状態にみえるので、それでつけるわけです。それで、

コードの内容からして、仮に時間が掛かったとしても、たかが数秒のことで、それで、%(パーセンテージ)表示が必要な部分があるのか疑問に感じています。私も、かつてプログレスバーで使ったことがあるけれど、最終的には、単に、テキストボックスに、「読み込み中」の表示を出すだけで終わってしまいました。

どこに、時間が掛かって、「処理中」の表示が必要なのか、お分かりになりますか?

プロシージャ名に「転記」とありますから、ループするのだろうと思いますが、それが書かれていません。今のままのコードでは、%(パーセンテージ) やプログレスバーをつける余地がありません。

この回答への補足

いつも未熟な私の質問に色々とお答え頂きありがとうございます。
ご指摘のとおり今回のコード(だいぶ省略していますが)ではほとんど必要の無いのですが、別のVBA処理の中でUserForm2.Show vbModeless を使っており、「お待ちください・・・」と表示されるだけなのでプログレスバー(今回皆さんからのご指導ではじめて知りました。)で%表示がでないかなと思った次第です。
コマンドボタンを押さないでUserFormが現われた状態では駄目なんでしょうね。
コードなど載せないで、簡単に質問すればよかったと反省しています。

補足日時:2005/07/09 09:59
    • good
    • 0

プログレスバーを表示させたいのでしょうか?



下記をどうぞ

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=405615
    • good
    • 0
この回答へのお礼

URLありがとうございます。大変参考になりました。

お礼日時:2005/07/09 10:02

処理内容としてはそのようなメッセージを表示させるほどの時間が掛かるような事は無いと思いますが・・・。



何が出来ないのでしょうか?
    • good
    • 0
この回答へのお礼

はい。すみません。そのとおりです。
UserFormを出した時に%がでないかなと思いまして。
質問の意図が分かりづらいコードの載せまして、ごめんなさい。
お答え頂きありがとうございました。

お礼日時:2005/07/09 10:07

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