Excel VBA入門1問1答 2/2
元ネタ:ネット
http://www.asahi-net.or.jp/~zn3y-ngi/YNxv214.html#8-1
http://excel.usefulhp.com/excel-macro/excel-macro37.html
https://msdn.microsoft.com/ja-jp/library/office/ff193220.aspx
ほか。
ありがとうございます。
問題
問1
変数の宣言を強制するにはどうするか。
答1
問2
ボタンを押したら5秒後に「5秒たったよ」とメッセージを出す
方法を述べよ。
答2
問3
ボタンを押したら2秒置きにA列のセルを順番にラベルに表示していく
ただし、セルに何もなければやめる、という方法を述べよ。
答3
問4
問3と同じ動作で、別のボタンを押すと、途中でも表示が終わる
方法を述べよ。
答4
解答
問1
モジュールの最初に以下のコードを書く。
Option Explicit
問2
標準モジュールに次のようなプロシージャを書く。
Sub MyTime()フォームにボタンを貼り付け、次のようなコードを書く。
MsgBox "5秒たったよ"
End Sub
Private Sub CommandButton1_Click()呼び出すプロシージャをフォームのコードと一緒に書く方法がわからない。
Application.OnTime Now + TimeValue("00:00:05"), "MyTime"
End Sub
そもそもVBAの構造化の慣習がわからない。
が、まあ、とりあえず。
問3
標準モールを次のようにする。
Option Explicitフォームにはラベルとボタンを貼り付けて、ボタンのコードを次のようにする。
Dim line As IntegerSub MyTime()
UserForm1.Label1.Caption = Worksheets("Sheet1").Cells(line, 1).Value
line = line + 1
If Worksheets("Sheet1").Cells(line, 1).Value <> "" Then
Application.OnTime Now + TimeValue("00:00:02"), "MyTime"
End If
End SubSub MyHello()
line = 1
UserForm1.Show
End Sub
Private Sub CommandButton1_Click()
MyTime
End Sub
問4
標準モールを次のようにする。
Option Explicitボタンをもう1つ貼り付けてそのコードを次のようにする。
Dim line As Integer
Dim sd As DateSub MyTime()
UserForm1.Label1.Caption = Worksheets("Sheet1").Cells(line, 1).Value
line = line + 1
If Worksheets("Sheet1").Cells(line, 1).Value <> "" Then
sd = Now + TimeValue("00:00:02")
Application.OnTime sd, "MyTime"
End If
End SubSub MyTimeStop()
If Now > sd Then
Exit Sub
End If
Application.OnTime sd, "MyTime", , False
End SubSub MyHello()
line = 1
UserForm1.Show
End Sub
Private Sub CommandButton2_Click()あと、一応次のコードをフォームに足してみた。
MyTimeStop
End Sub
役に立つかどうかはわからない。
Private Sub UserForm_Terminate()
MyTimeStop
End Sub
しかし、OnTimeの動作がよくわからない。
特に、ダブって命令してしまったときの処理が不安定な気がする。
つまり、ボタンを連打したりするとハングアップする。
しかし、OnTimeの進行状況を見る方法を私は知らないので、
きちんと対処する方法がない。
今言えることは、「OnTimeを連打するな」である。