コマンドボタン |
|
|
---|---|---|
ユーザフォーム初期化 |
|
|
オプションボタン |
|
|
テキストボックス値の取得 |
|
|
チェックボックス値の取得 |
|
シフトを押してコマンドボタンが押されたか |
CommandButton_Clickではできません。Mouseのイベント読んで判断。例えばMouseUpイベントを使って、
|
|
---|---|---|
テキストボックスの入力モード設定 | TextBoxをクリックした時のIMEモードをユーザフォームのプロパティーウインドウで設定する。
|
|
プログラムからIMEモードを設定する。
|
||
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を混在することは出来ない。
|
|
---|---|---|
ユーザホームの表示完了を待つ |
UserFormをモードレスで起動すると、起動側はUserFormの表示完了を待たずに処理を続行してしまうので、関連したUserFormを表示するなどの場合、それぞれの起動タイミングを同期できない。 そこで、UserFormの表示完了を待つコードを挿入して同期を取る。
|
|
ユーザーフォームの初期表示位置を設定 |
|
|
ユーザーフォームを任意の位置に表示 |
|
|
メッセージボックスのサイズ指定 |
フォントサイズに対して
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