| コマンドボタン |
Private Sub CommandButton1_Click() (処理記述) End Sub |
|---|---|
| ユーザフォーム初期化 |
Private Sub UserForm_initialize() TextBox1.Text = "" Label4.Caption = S作成日 (初期化処理記述) End Sub |
| オプションボタン |
Private Sub OptionButton1_Click() status = True Button = "受注報告" End Sub |
| テキストボックス値の取得 |
Private Sub TextBox1_Change() 検索文字 = TextBox1.Text End Sub |
| チェックボックス値の取得 |
Private Sub CommandButton1_Click() Dim 売上実績表 As Boolean Dim 営業通信簿 As Boolean Dim 営業ランキング As Boolean 売上実績表 = UserForm1.CheckBox1.Value 営業通信簿 = UserForm1.CheckBox2.Value 営業ランキング = UserForm1.CheckBox3.Value UserForm1.Hide Call Step2_Main(売上実績表, 営業通信簿, 営業ランキング) Unload Me End Sub |
| シフトを押してコマンドボタンが押されたか |
CommandButton_Clickではできません。Mouseのイベント読んで判断。例えばMouseUpイベントを使って、
Private Sub CommandButton1_MouseUp(ByVal Button As Integer, _
ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Shift = 7 Then
MsgBox "隠し機能"
Else
MsgBox "通常機能"
End If
End Sub
引数Shiftの値 内容
|
|---|---|
| テキストボックスの入力モード設定 | TextBoxをクリックした時のIMEモードをユーザフォームのプロパティーウインドウで設定する。
|
プログラムからIMEモードを設定する。
Private Sub UserForm_Initialize() UserForm1.Caption = "商品名の入力" With TextBox1 .Value = "" .IMEMode = fmIMEModeKatakana .SetFocus End With End Sub |
|
| Shift+クリックや Ctrl+クリックの判別 |
標準の「CommandButton_Click」ではできません。 左ボタンと右ボタンを判別したように、MouseDownイベントかMouseUpイベントを使う。
Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _引数Shiftに結果が格納される。
|
| コマンドボタンの右クリック |
コマンドボタンをダブルクリックして表示されるプロシージャでは、左ボタン(標準ボタン)のクリックしか判別できません。 左ボタンと右ボタンで、別の処理を行いたい場合は、Clickイベントではなく、MouseDownイベントまたはMouseUpイベントを使います。
Private Sub CommandButton1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, _引数Buttonにクリックされたボタンを表す数値が格納される。
|
| Tabによるフォーカスをパス | プロパティのTabStopをFalseに設定 |
| ユーザフォームのモードレス(非同期)起動 |
UserFormの起動のデフォルトモードはモーダル(同期起動)ですが、この場合全てのインターアクションをUserFormが取ってしまうので、UserFormを終了しないと、その他の操作が行えない。 UserFormが表示されていても他の操作(Excelのメニュー操作等)を可能にするためにはUserFormをモードレスで起動する必要がある。 但し一つのプロセスでモーダル起動とモードレス起動のUserFormを混在することは出来ない。 UserForm5.Show vbModeless |
|---|---|
| ユーザホームの表示完了を待つ |
UserFormをモードレスで起動すると、起動側はUserFormの表示完了を待たずに処理を続行してしまうので、関連したUserFormを表示するなどの場合、それぞれの起動タイミングを同期できない。 そこで、UserFormの表示完了を待つコードを挿入して同期を取る。
UserForm3.Show vbModeless
DoEvents
Application.Wait (Now + TimeValue("0:0:3")) '現在時刻より1秒後
Unload UserForm3
DoEvents
|
| ユーザーフォームの初期表示位置を設定 |
Sub ユーザーフォーム表示位置設定()
UserForm1.StartUpPosition = 3 '画面の左上隅(WindowsDefault)
UserForm1.StartUpPosition = 2 '画面全体の中央(CenterScreen)
UserForm1.StartUpPosition = 1 'UserFormが属する項目の中央(CenterOwner)
UserForm1.StartUpPosition = 0 '初期表示位置を表す値を指定しない(Manual)
End Sub
|
| ユーザーフォームを任意の位置に表示 |
Sub ユーザーフォーム任意位置表示()
With UserForm1
.StartUpPosition = 0 '初期表示位置を表す値を指定しない
.Top = 100 '上端からの距離を設定する
.Left = 300 '左端 〃
.Show '表示する
End With
End Sub
|
| メッセージボックスのサイズ指定 |
フォントサイズに対して
Boxの高さは Height Boxの幅は Width |
'<イニシャライズ>
Private Sub UserForm_initialize()
EndYes = False
End Sub
'<続行>
Private Sub CommandButton2_Click()
EndYes = False
UserForm2.Hide
End Sub
'<終了>
Private Sub CommandButton1_Click()
EndYes = True
Unload Me
End Sub
Const MaxBar As Integer = 26
Dim Step As Integer
Dim A As Integer
'ユーザフォームの初期化
UserForm1.Caption = "商品品目対応表作成"
UserForm1.ProgressBar1.Value = 0
UserForm1.ProgressBar1.Min = 0
UserForm1.ProgressBar1.Max = MaxBar
step = RowMax / MaxBar + 1
'ユーザフォームを表示
UserForm1.Show vbModeless
J = 2
For I = 2 To RowMax
' 処理
'プログレスバーの値の設定
A = I Mod step
If A = 0 Then
UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Value + 1
UserForm1.Label2.Caption = I '処理量
UserForm1.Label4.Caption = J '処理結果量
'再表示
UserForm1.Repaint
End If
Next I
'終了
Unload UserForm1Private Sub UserForm_initialize() Label1.Caption = MsgTitle Label2.Caption = Massage End Sub
Sub 表示テスト()
Dim 指定時刻 As Date
Dim I As Integer
Dim MTitle As String
MTitle = "処理途中表示"
For I = 1 To 10
Call ProgressDisp(MTitle, I)
指定時刻 = Now + TimeValue("0:0:1") '現在時刻より1秒後
Application.Wait (指定時刻) 'Wait処理
Call ProgressEnd
Next I
End Sub
Sub ProgressEnd()
Unload UserForm1
DoEvents 'Unloadの完了待ち
End Sub
Public Job As Integer
Public メッセージ As String
Sub MsgDisp(Job, メッセージ)
Select Case Job
Case 0
'UserForm1.Caption = メッセージ
UserForm102.Show vbModeless
Case 1
UserForm102.Label1.Caption = メッセージ
UserForm102.Repaint
Case 9
Unload UserForm102
End Select
End Sub
Sub MsgDisp_Test()
Call MsgDisp(0, "メッセージ表示テスト")
Application.Wait [Now() + "0:00:01"]
Call MsgDisp(1, "メッセージテスト1")
Application.Wait [Now() + "0:00:01"]
Call MsgDisp(1, "メッセージテスト2")
Application.Wait [Now() + "0:00:01"]
Call MsgDisp(1, "メッセージテスト3")
Application.Wait [Now() + "0:00:01"]
Call MsgDisp(9, "")
End Sub