一回も披露したことのない豆知識

こんばんわ。

教えていただけないでしょうか。。。

ワークシート上にコマンドボタンがあり、それを押すと集計を始めます。
その際にユーザーフォームで「集計中」と書いたものを表示させ、バックで集
計したいと思っておりますが、うまくいっておりません。

流れとしては、
ワークシート上に、コマンドボタンをクリックさせユーザーフォームを表示さ
せる「***.show」を記述し、集計するためのコードが書いてある標準モジュー
ル「module2」へ移動させる書き方をしたら、
***.show
の部分で止まってしまいました。
***.showから集計のコードへ移すには何かコツがいるのでしょうか???

恐れ入りますが、ご教示のほど宜しくお願いします。

A 回答 (4件)

ANo2の方のを少し改良すると


'シートモジュール----------------------------------------------
Private Sub CommandButton1_Click()
 Call Test
End Sub

'標準モジュール----------------------------------------------
Sub Test()
Dim i As Long
 UserForm1.Show vbModeless
 DoEvents
 For i = 1 To 2000
  ActiveSheet.Range("A" & i) = i

  'ここを改良
  If i mod 10 = 0 then
   UserForm1.Caption = "ただいま処理中・・・・" & i
   DoEvents
  End if

 Next i
 Unload UserForm1
End Sub

ウィンドウズの処理(メッセージキュー?)の中では、画像処理の優先度が低いのです。
なので、表示を更新したい場合はDoEventsを入れて、表示をリフレッシュさせるのです。
    • good
    • 1
この回答へのお礼

ありがとうございます。


ウィンドウズの処理(メッセージキュー?)の中では、画像処理の優先度が低いのです。
なので、表示を更新したい場合はDoEventsを入れて、表示をリフレッシュさせるのです。

なるほど。。。

お蔭様で完成させることができました。
ありがとうございます。

今後とも何卒宜しくお願いいたします。

お礼日時:2006/07/30 12:02

とりあえず切り分けします。



Private Sub Frm集計中_Activate()
msgbox "テスト"
食費DB化
End Sub

MsgBoxをユーザーフォームのコードに追加して、メッセージボックスが出てくるか確認してください。
    • good
    • 0

Show を モードレスで実行すれば良いかと思います、、、たぶん。


下記はアクティブシートのA列に書込みに行くので、試すなら新規ブックで。

'シートモジュール----------------------------------------------
Private Sub CommandButton1_Click()
 Call Test
End Sub

'標準モジュール----------------------------------------------
Sub Test()
Dim i As Long
 UserForm1.Show vbModeless
 DoEvents
 For i = 1 To 2000
  ActiveSheet.Range("A" & i) = i
  UserForm1.Caption = "ただいま処理中・・・・" & i
 Next i
 Unload UserForm1
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
うまくいきました。

しかしユーザーフォームに書いた内容(「集計中...」)という文字が表示されておらずの状態です。
処理時間は10秒くらいですが、vbmodelessだと文字は表示されないものなのでしょうか?

恐れ入りますが、お時間ある時に教えていただければと思います。
宜しくお願い致します。

お礼日時:2006/07/30 10:14

一例ですが・・



シート1にこんなマクロを書いて
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub

ユーザーフォームには
Private Sub UserForm_Activate()
test '名前です
End Sub

標準モジュールには
Sub test()
'実行させたいコード
unload userform1
End Sub


これで動くはずですよ。
    • good
    • 1
この回答へのお礼

ありがとうございます。

それでもユーザーフォームで止まってしまっているような気がしますして、以下に実際に書いたコードを記しますので添削をお願いできませんか?

(ワークシート上のコマンドボタン)
Private Sub 食費DB_Click()
Frm集計中.Show
End Sub

(ユーザーフォームのコードです)
Private Sub Frm集計中_Activate()
食費DB化
End Sub

(標準モジュールに書いたコードです)
Sub 食費DB化()
Unload Frm食費DB化
End Sub

---
お願い致します。。。

お礼日時:2006/07/30 01:28

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A