お世話になります。
Excel VBA 2007で質問です。
今、
Label1 ComboBox1 TextBox1
Label2 ComboBox2 TextBox2
・・・
Label100 ComboBox100 TextBox100
のようなフォームがあるとします。
ComboBox1~100は「Any」「is」「is not」のいずれかの値が取れ、初期値はAnyとします。
TextBox の Enabled プロパティの初期値は False とします。
やりたいことは、
ComboBox が「Any」でない場合(is または is not のいずれかの場合)にのみその右隣の TextBox の Enabled プロパティを True にしたいのです。
いま、ComboBox30 を Any から is に切り替えたとします。
すると、TextBox30.Enabled を False から True にしたいのです。
ここで、ComboBox30 を is から is not に切り替えたとします。
TextBox30.Enabled は True のままです。
ここで、ComboBox30 を is not から Any に切り替えたとします。
すると、TextBox30.Enabled を True から False にしたいのです。
ComboBox のイベントハンドラで
Sub ComboBox30_Change ()
If ComboBox30.Value = "Any" Then
TextBox30.Enabled = "False"
Else
TextBox30.Enabled = "True"
End If
End Sub
のように書けばいいことは分かっているのですが、その場合は数字だけ変えたイベントハンドラを100個書かなければなりません。
このイベントハンドラを1個にすることはできるでしょうか。
(コンボボックス100個のうちどれかが変更されたら、変更されたコンボボックスの番号を知りながら呼び出されるハンドラ)
次善の策として、
Sub ComboBox30_Change ()
userSubroutine
End Sub
のように書くこともできるかと思いますが、この場合、どのコンボボックスが変更されたか(どのイベントハンドラが起動されたか)を知って、userSubroutine に渡さなければなりません。
よろしくお願いします!
No.1ベストアンサー
- 回答日時:
こんにちは。
クラスモジュールを挿入して、そこに
Option Explicit
Public WithEvents CBX As MSForms.ComboBox
Public idx As Integer
Private Sub CBX_Change()
If CBX.Value = "Any" Then
UserForm1("TextBox" & idx).Enabled = False
Else
UserForm1("TextBox" & idx).Enabled = True
End If
End Sub
フォームモジュールには、
Option Explicit
Private cls(1 To 100) As New Class1
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 100
Set cls(i).CBX = Me.Controls("ComboBox" & i)
cls(i).idx = i
cls(i).CBX.List = Array("Any", "is", "is not")
Next
End Sub
Private Sub UserForm_Terminate()
Dim i As Integer
For i = 1 To 100
Set cls(i).CBX = Nothing
Next
End Sub
当方、EXCEL2002ですが、2007でもいけるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) ユーザーフォームに2つのコンボボックス銀行名「ConboBox1」支店名を「ConboBox2」とし 4 2022/08/03 17:34
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArduinoのジャイロモジュールMP...
-
標準モジュールを削除したい。(...
-
大量の標準モジュールを解放す...
-
モジュールの最大数はいくつな...
-
Excel VBAでリンク切れをチェッ...
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
ユーザー定義関数に#NAME?が返...
-
エクセルVBAでシートモジュール...
-
Excel VBA 定義されたプロージ...
-
シリアルポート制御
-
ユーザーフォームに最小化・最...
-
印刷後メッセージボックスを表...
-
Excel VBAでグローバルな変数は...
-
VBAを使用してWordからExcelの...
-
'Range'メソッドは失敗しました
-
Access VBA標準モジュールにつ...
-
Form間の値の渡し方
-
エクセルVBAで標準モジュー...
-
この家何平米くらいあると思い...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
エクセルVBAでシートモジュール...
-
VBA This Workbookモジュール...
-
モジュールの最大数はいくつな...
-
Excel VBAで、ユーザーフォーム...
-
VBAで旧字体を異字体に一括で変...
-
Access VBA標準モジュールにつ...
-
VBA モジュールで共通に使う変...
-
'Range'メソッドは失敗しました
-
グラフのX,Y座標を取得したい
-
モジュールとは何ですか
-
Excel VBA 『Call』で呼び出す...
-
プラグイン、ライブラリ、コン...
-
【vba】フォームに書いてあ...
-
モジュールからフォームのボタ...
-
モジュールとクラスの違いって...
-
acwzlibとは?
おすすめ情報