Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3332 / 13646 ツリー ←次へ | 前へ→

【62875】フォームを手前に表示したい ともちゃ 09/9/10(木) 23:00 質問[未読]
【62877】Re:フォームを手前に表示したい ichinose 09/9/11(金) 7:13 発言[未読]
【62895】Re:フォームを手前に表示したい ともちゃ 09/9/13(日) 19:35 お礼[未読]

【62875】フォームを手前に表示したい
質問  ともちゃ E-MAIL  - 09/9/10(木) 23:00 -

引用なし
パスワード
   2度目の投稿となります。
ともちゃと申します。よろしくお願いいたします。

VBAのご質問です。

マクロでデータチェックを実施している際に
フォームで「データチェック中・・・」と表示したいのですが
フォーム内のラベルが真っ白になって何も見えない状態です。

おそらく、データチェックを実行しているエクセルがアクティブとなっているのが
原因かと思っております。

これを防ぐには、APIのSetwindowPos?を利用すればよいというところまで
探してみたのですが、この使用方法がよくわかりません。

もしお詳しい方いらっしゃいましたら、ご教授お願いいたします。

【62877】Re:フォームを手前に表示したい
発言  ichinose  - 09/9/11(金) 7:13 -

引用なし
パスワード
   おはようございます。

>マクロでデータチェックを実施している際に
>フォームで「データチェック中・・・」と表示したいのですが

例えば、以下のコードは、A列にランダムな数値を配置し、
5000より、大きい値には、対応B列にokと表示するコードですが、
このコード実行中にユーザーフォームで、
「データチェック中・・・」と表示したいと言うことですか?

Sub データチェック()
  Dim rng As Range
  With Columns(1)
    .Formula = "=int(rand()*10000)+1"
    .Value = .Value
    For Each rng In .Cells
     If rng.Value > 5000 Then
       rng.Offset(0, 1).Value = "ok"
     End If
    Next
  End With
End Sub

そうだとすると・・・、
データチェック中・・・とラベルを配置したユーザーフォームをUserForm1とした場合、

以下のコードだと、
>フォーム内のラベルが真っ白になって何も見えない状態です。

と言う現象になります。


Sub データチェック()
  Dim rng As Range
  UserForm1.Show vbModeless
  With Columns(1)
    .Formula = "=int(rand()*10000)+1"
    .Value = .Value
    .Offset(0, 1).ClearContents
    For Each rng In .Cells
     If rng.Value > 5000 Then
       rng.Offset(0, 1).Value = "ok"
     End If
    Next
  End With
  Unload UserForm1
End Sub


以下のようにDoeventsを入れると正常にユーザーフォームが表示されるはずです。

Sub データチェック()
  Dim rng As Range
  UserForm1.Show vbModeless
  DoEvents
  With Columns(1)
    .Formula = "=int(rand()*10000)+1"
    .Value = .Value
    .Offset(0, 1).ClearContents
    For Each rng In .Cells
     If rng.Value > 5000 Then
       rng.Offset(0, 1).Value = "ok"
     End If
    Next
  End With
  Unload UserForm1
End Sub

【62895】Re:フォームを手前に表示したい
お礼  ともちゃ  - 09/9/13(日) 19:35 -

引用なし
パスワード
   ▼ichinose さん:

お返事が遅くなってしまって、大変申し訳ありません。
ご回答ありがとうございます!

DoEvents関数を使用すればよかったのですね。
明日試してみます。
ありがとうございました!

3332 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free