EXCEL VBAのフォームにテキストボックスを複数作成しております。
下記のように複数のテキストボックスで同じ処理を行うのですが
コントロール→ループか何かで簡素化できないでしょうか?
Private Sub TextBox17_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox17.Value = Format(TextBox17.Value, "0.00")
End Sub
Private Sub TextBox18_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox18.Value = Format(TextBox18.Value, "0.00")
End Sub
Private Sub TextBox19_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox19.Value = Format(TextBox19.Value, "0.00")
End Sub
Private Sub TextBox20_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox20.Value = Format(TextBox20.Value, "0.00")
End Sub
Private Sub TextBox21_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox21.Value = Format(TextBox21.Value, "0.00")
End Sub
Private Sub TextBox22_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox22.Value = Format(TextBox22.Value, "0.00")
End Sub
以上お力添えお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
こんにちは。
クラスモジュールを別途設けて、イベントの記述を一つに纏める、
ということになりますが、
残念ながら、クラスモジュールでは、_Exit イベントを扱えません。
どう工夫するか、という話になります。
”簡素化”というテーマに副う意味では、
疑似的な方法として、_Exit イベントの代りに、
_KeyDown イベントにしてみては如何でしょう。
TextBox に対して、Enter キー または Tab キー が押されたら
処理するように書いてみました。
実際には、マウスの操作で他のコントロールにフォーカスを移動させる
こともあるでしょうけれど、これも含めてしまうと、
”簡素”と呼べるようなものにはなりません。
ひとまず、試してみて、仕様について再検討してみてください。
マウスの操作をトラップするアイディアはあります。、
ユーザーフォームすべてのコントロール(今回対象になっているTextBox以外すべて)
について、_MouseDown イベント から、
現在フォーカスのあるコントロールのタブインデックス(等)を常に監視することで、
他のコントロールにフォーカスが移ったことをチェックする、
というようなことです。
一部、_MouseDown イベントが用意されていないコントロールもありますし、
どの種類のコントロールがあるか、把握しないと何とも言えないです。
ユーザーフォームには、TextBoxしかない、っていう条件なら、
比較的簡単に書ける気はします。
同じ処理をするイベントプロシージャの列車を作らない、という点に絞って考えるなら、
”簡素化”という方向は見いだせると思います。
妥協点をどこら辺に設定するか、といったところになると思います。
以下、サンプルです。
ユーザーフォームモジュールに現に書かれた各種イベントプロシージャがある筈ですから、
イベントの重複や二次的な呼び出しなどには注意して下さい。
試すなら、今あるモジュール全体を一旦コメントブロックしてからの方がいいかも知れません。
17 To 22 という記述が2カ所、TextBox#の数字範囲を指しています。書き換え可。
クラスモジュールはVBEのメニューバー[挿入]→[クラスモジュール]を選びます。
ユーザーフォーム読み込み時に、クラスモジュールが機能するよう設定します。
' ' UserForm モジュール ' 8307193 Excel2010で動作確認
' ' =================================
Option Explicit
Private clsTextBoxes() As Class1
Private Sub UserForm_Initialize()
Dim i As Long
ReDim clsTextBoxes(17 To 22)
For i = 17 To 22
Set clsTextBoxes(i) = New Class1
clsTextBoxes(i).SetTBX Controls("TextBox" & i)
Next i
End Sub
' ' =================================
' ' Class1 モジュール ' 8307193
' ' =================================
Option Explicit
Private WithEvents myTextBox As MSForms.TextBox
Sub SetTBX(ByVal tbx As MSForms.TextBox)
Set myTextBox = tbx
End Sub
' ' ●ココ↓が一括されたイベントプロシージャ●
Private Sub myTextBox_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then myTextBox.Value = Format(myTextBox.Value, "0.00")
End Sub
' ' =================================
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA。複数のChangeイベントをまとめる方法 2 2022/03/31 12:03
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) Excel VBA ユーザーフォーム1のコンボボックスに別ブックの値を反映させたいです。 6 2023/03/21 16:12
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームで動的(Me.Con...
-
エクセル・VBA CheckBoxのオブ...
-
ExcelVBAでListViewが使用できない
-
WinAPIで電卓をクリック
-
C#で角が丸いテキストボックス
-
カメラスクロールするのを動画...
-
asp.netでToolTipコントロール...
-
もしフォームヘッダーにコント...
-
エクセル コントロールツール...
-
chr関数の呼び出しで「プロ...
-
悩みがあろうと、それなりに幸...
-
fpSpreadコントロール ライセ...
-
コンボボックスの文字によるif...
-
USB I/Oのデジタル信号をvbaで...
-
ListViewのチェックボックスに...
-
DataGridView、1セルに複数コ...
-
エクセルVBAでオプションボタン...
-
Labelコントロールの(左右)余...
-
OCXって何ですか?
-
With~EndWithの省略部分と引数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報