コマンドボタン |
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 UserForm1
Private 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