Excel VBA のkernel32に関して教えて下さい。
ユーザーフォーム中のラベルをkernel32を使用して点滅させています。
ユーザーフォームにコマンドボタンがあり、それを押すとRange("A1") = 1となり、点滅動作を停止させワークシートの処理をします。コマンドボタン押下で点滅動作は停止しますが、ワークシートのセルがロックがかかった様な状態になり入力できません。
おそらくkernel32が解除されていない為だと思われます。
どなたかその解除方法を御存知の方がいらっしゃれば御教授宜しくお願い致します。
尚、ユーザーフォームはvbModelessで表示させ、ワークシートへ直接入力を行います。
下記がコーディングです。
' Label2 Blinking
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub UserForm_Activate()
Do Until Range("A1") = 1
If Label2.Visible = True Then
Label2.Visible = False
Else
Label2.Visible = True
End If
IN_cnt = GetTickCount
Do Until Range("A1") = 1
DoEvents
If GetTickCount - IN_cnt >= 1000 Then Exit Do
Loop
Loop
End Sub
Private Sub CommandButton1_Click()
Range("A1") = 1
・・・・・
・・・・・
ワークシート処理
・・・・・
・・・・・
End Sub
こんにちは。
原因が良くわかりにくいので、コーディングしてみました。 とりあえず、
ボタンをクリックするまでは、ブリンクしてますし、シートのセル編集もできています。
Public vstart_time As Variant
Public Blinking As Variant
Private Declare Function GetTickCount Lib "kernel32" () As Long
Private Sub CommandButton1_Click()
Blinking = False
Me.Label1.Visible = True
MsgBox "処理をします"
End Sub
Private Sub UserForm_Activate()
vstart_time = GetTickCount
Blinking = True
While Blinking = True
DoEvents
v1 = GetTickCount
Application.StatusBar = v1
If Int((v1 - vstart_time) / 1000) Mod 2 = 0 Then
Me.Label1.Visible = True
Else
Me.Label1.Visible = False
End If
DoEvents
Wend
End Sub
ブリンクのタイミングの計算方法を変更しましたので、コードを見て、わからなかったら補足で質問してください。
(ぱっと見て、今のコードは、カーネルと関係ないところで正しく動作していない、雰囲気です)
0 件のコメント:
コメントを投稿