質問するログイン新規登録

回答編集履歴

1

追記

2016/01/15 04:40

投稿

jawa
jawa

スコア3021

answer CHANGED
@@ -41,4 +41,81 @@
41
41
  Macro1を実行すると5秒後にsubChangeが実行されるようタイマーがセットされます。
42
42
  subChangeでは目的の処理(このサンプルではセル値の加算)を行った後にさらに5秒後のタイマーをセットしています。
43
43
 
44
- 現在MouseUp時に行っている画像やラベルの変更処理をメソッド化し、タイマーイベントとMouseUpイベントで同じ処理を呼び出すようにすれば目的の動作になると思います。
44
+ 現在MouseUp時に行っている画像やラベルの変更処理をメソッド化し、タイマーイベントとMouseUpイベントで同じ処理を呼び出すようにすれば目的の動作になると思います。
45
+
46
+ ---
47
+ 上記サンプルはユーザーフォームを使わずExcelシート上で動作するものでしたが、フォーム表示中は動作しないようでした。
48
+ Microsoftの技術情報にAPIを利用する方法がありましたので、別案として追記させていただきます。
49
+
50
+ (参考サイト)
51
+ https://support.microsoft.com/ja-jp/kb/180736
52
+
53
+
54
+ ①「モジュールの追加」で標準モジュールを作成し、以下コードを追加する
55
+ ```
56
+ Declare Function SetTimer Lib "user32" _
57
+ (ByVal hwnd As Long, _
58
+ ByVal nIDEvent As Long, _
59
+ ByVal uElapse As Long, _
60
+ ByVal lpTimerFunc As Long) As Long
61
+
62
+ Declare Function KillTimer Lib "user32" _
63
+ (ByVal hwnd As Long, _
64
+ ByVal nIDEvent As Long) As Long
65
+
66
+ Global iCounter As Integer
67
+
68
+ Sub TimerProc(ByVal hwnd As Long, _
69
+ ByVal uMsg As Long, _
70
+ ByVal idEvent As Long, _
71
+ ByVal dwTime As Long)
72
+
73
+ 'ここにタイマーイベントで行いたい処理を記述する
74
+ iCounter = iCounter + 1
75
+ UserForm1.colorword
76
+ End Sub
77
+ ```
78
+
79
+ ②ユーザーフォーム(UserForm1)にCommandButton1とLabel7を配置し、タイマーの開始/終了を制御する(以下ではCommandButton1クリックで開始/停止)
80
+ ```
81
+ Dim lngTimerID As Long
82
+ Dim BlnTimer As Boolean
83
+
84
+ Private Sub Form_Load()
85
+ BlnTimer = False
86
+ Command1.Caption = "Start Timer"
87
+ End Sub
88
+
89
+ Private Sub CommandButton1_Click()
90
+ If BlnTimer = False Then
91
+ 'Startボタンの時にクリックした場合
92
+ 'タイマー開始(5000ミリ秒=5秒)
93
+ lngTimerID = SetTimer(0, 0, 5000, AddressOf TimerProc)
94
+ If lngTimerID = 0 Then
95
+ MsgBox "タイマーを開始できませんでした。"
96
+ Exit Sub
97
+ End If
98
+ BlnTimer = True
99
+
100
+ 'Stopボタンに変更
101
+ CommandButton1.Caption = "Stop Timer"
102
+ Else
103
+ 'Stopボタンの時にクリックした場合
104
+ 'タイマー停止
105
+ lngTimerID = KillTimer(0, lngTimerID)
106
+ If lngTimerID = 0 Then
107
+ MsgBox "タイマーを停止できませんでした。"
108
+ End If
109
+ BlnTimer = False
110
+
111
+ 'Startボタンに変更
112
+ CommandButton1.Caption = "Start Timer"
113
+ End If
114
+ End Sub
115
+
116
+ '↓標準モジュールから呼び出すためPublic関数にしています。
117
+ Public Sub colorword()
118
+ '↓カウントをラベル7に表示しているだけです
119
+ Label7.Caption = iCounter
120
+ End Sub
121
+ ```