LoginSignup
0
3

More than 5 years have passed since last update.

【vba】処理中に他の操作を受け付けないようにする

Last updated at Posted at 2019-04-18

vba処理中に「保存」をしたり既に開いているBookを閉じると、vba処理がとまっていることがある。
特にエラー表示もないので、「いつの間にか止まってる…」って感じでどうにか回避したい。

ということで、vba処理中に他の操作を受け付けないような方法を調べた。




■フォームコントロールの場合

①ユーザーフォーム作成

ユーザーフォーム
'sleepのAPI使う為に記述
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)

'ユーザーフォームがshowで呼ばれて表示されたときに呼ばれる
Private Sub UserForm_Activate()

    'ユーザーフォームを表示させるお作法
    Me.Repaint

    '時間のかかる処理を記述
    '※sleepで無理やり時間のかかる処理を記述
    Dim count As Integer
    count = 0
    Do While count < 10
        'ユーザーフォームに秒数表示
        Processing.timeLabel.Caption = count & "秒"
        '時間かかるときのお作法
        DoEvents
        '強制1秒待機
        Sleep 1000
        'カウントアップ
        count = count + 1
    Loop

    'ユーザーフォームを消す
    Unload Me

End Sub



②①で作成したユーザーフォーム表示用のプロシージャ作成

ユーザーフォーム表示プロシージャ作成
'標準モジュールに下記プロシージャを記述する。
Public Sub process()

    Processing.Show

End Sub



③上記プロシージャを呼び出すボタンを作成
image.png

image.png
image.png



④③で作成したボタンを押下すると、10秒間ユーザーフォームが表示され、その間他の操作はできない。
image.png




■ActiveXコントロールの場合
①ActiveXコントロールのボタンを作成する。
image.png

image.png


②デザインモードにして、①のボタンをダブルクリックする。
image.png


③clickイベントでユーザーフォームを表示する処理を記述。
image.png


④デザインモードを解除して、①で作成したボタンをクリックする。
image.png

0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3