2012年5月2日水曜日

Excel VBA のkernel32に関して教えて下さい。 ユーザーフォーム中のラベルをkernel...

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 件のコメント:

コメントを投稿