Excel VBA質問箱 IV

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

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


19295 / 76738 ←次へ | 前へ→

【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

0 hits

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

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