No.2ベストアンサー
- 回答日時:
強引な方法ですが、こんな感じでできます。
Dim objControl As Control
On Error Resume Next
For Each objControl In Me.Controls
objControl.Enabled = False
Next
フォーム上のコントロールは、Controlsで取得できます。
On Error Resume Nextをかけているのは、コントロールにEnabledプロパティがないものがあるとエラーが発生するためです。
フォーム全体を殺したい場合は、
Me.Enabled = False
って方法もありますが、用途が違いますね。
まさに的確な方法をいただきましてありがとうございます。
私がしたかったことが一発で解決です。
フォーム上に50個以上のオブジェクトがあって
ある時にだけそのうちの3つのオブジェクト以外は触られたくなかったのです。
この方法で全てをFalseに設定した後に3つだけTrueにするほうがはるかに時間と手間が省けます。
ありがとうございました。
No.1
- 回答日時:
そのような方法は今までで聞いた事ありません。
(実はそのような方法があったら申し訳ないのですが...)
しかし、そのようなケースに遭遇したことはあります。
その時、私はこのように対処しました。
例えば、テキストボックスやラベルが複数あり、
ある状況によって、使えたり使えなかったりするパターンが
3通りあるとします。
それらをそれぞれ対象のコントロールのTagプロパティに
"1","2","4"と設定しておき、
下記に書いたような関数を呼びます。
Private Sub Command1_Click()
Call EnabledChange(1)
End Sub
Private Sub EnabledChange(ByVal lTag As Long)
Dim w As Control
For Each w In Me 'Form上の全てのコントロールを走査する
With w
If .tag = "" Or .tag = "0" Then
'何もしない
Else
'使用可不可の設定
.Enabled = ((CLng(.tag) And lTag) > 0)
End If
End With
Next w
End Sub
これによって、デザイン時に設定したTagプロパティの値で
自動的にEnabledプロパティは一気に変更できます。
また、Tagプロパティを使わずに、
Fremeコントロールの上にコンテナさせて、
このFrameコントロールに乗っているから変更するという方法もあります。
Private Sub Command1_Click()
Call EnabledChange(Frame1)
End Sub
Private Sub EnabledChange(ByVal objFrame As frame)
Dim w As Control
For Each w In Me 'Form上の全てのコントロールを走査する
With w
Select Case .Container.Name
Case Me.Name
'フォームに乗っているものに関しては何もしない
Case objFrame.Name
'選択したFrameに乗っているものに関しては使用可にする
.Enabled = True
Case Else
'選択したFrame以外のフレームに乗っているものに関しては
'使用不可にする
.Enabled = False
End Select
End With
Next w
End Sub
まるっきり全てのコントロールを使用不可にするのであれば
以下の方法でよいと思います。
Private Sub Command1_Click()
Call EnabledChange(False)
End Sub
Private Sub EnabledChange(ByVal bFlg As Boolean)
Dim w As Control
For Each w In Me 'Form上の全てのコントロールを走査する
With w
'使用可不可の設定をする。
.Enabled = bFlg
End With
Next w
End Sub
とりあえず、一気にとはいきませんが、
一つ一つ書かなくても良い分、いくらか楽だとは思いますが。
ご参考までに...。
ご丁寧にありがとうございます。とりあえづためしにやってみましたが
あまりうまくいきませんでした。でも、VBの勉強になりました。 ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Illustrator(イラストレーター) Illustratorでオブジェクトの色が勝手に変わって困っています。 4 2022/09/04 18:47
- Excel(エクセル) 【エクセルマクロ】既に開いているIEの、サイズや表示位置を変更するには 4 2022/12/01 22:57
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- Visual Basic(VBA) findメソッドの変数について 6 2023/06/23 08:01
- Excel(エクセル) マクロでボタンにつける名前がどこに設定されているかわからないケースがありました。 1 2023/06/19 19:37
- Java 複数TBLのオブジェクトを1つの変数(オブジェクト)でまとめて管理したい 1 2022/12/17 00:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/07/03 09:11
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Photoshop(フォトショップ) インデザイン 上で、フォトショップの線の色を変えたい 4 2022/06/12 18:49
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
レコードセットにnullの場合
Visual Basic(VBA)
-
別フォームから戻ったときのイベント
Visual Basic(VBA)
-
VB.NET getとsetの概念がわかりません。
Visual Basic(VBA)
-
-
4
Labelコントロールの(左右)余白について
Visual Basic(VBA)
-
5
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
EXCELでactivexコントロールを...
-
コンボボックスの文字によるif...
-
C#で角が丸いテキストボックス
-
ExcelVBAでListViewが使用できない
-
C#で自分のウインド・ハンド...
-
間違えて配置してしまったコン...
-
エクセルVBAでオプションボタン...
-
コントロール配列と同じような...
-
'ckbl' コントロールは作成され...
-
VB.NET 動的コントロールの存在...
-
もしフォームヘッダーにコント...
-
ListViewのチェックボックスに...
-
With~EndWithの省略部分と引数...
-
(VBA)スピンボタンの大量...
-
コントロールのイベントの透過
-
VBAのエラーについて、”実行時...
-
ユーザーフォームで動的(Me.Con...
-
vb.netで画面のコントロールId...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
カメラスクロールするのを動画...
-
エクセル・VBA CheckBoxのオブ...
-
vb.netで画面のコントロールId...
-
エクセルVBAでオプションボタン...
-
EXCELでactivexコントロールを...
-
ExcelVBAでListViewが使用できない
-
excelのリストボックスで選択し...
-
ユーザーフォームで動的(Me.Con...
-
フォーム上の現在アクティブな...
-
C#で自分のウインド・ハンド...
-
変数をコントロール型で使用す...
-
VBAのフォームでTextBoxがいっ...
-
コントロールを移動できない
-
Groupboxの配下のコントロール...
-
C#で角が丸いテキストボックス
-
(VBA)スピンボタンの大量...
-
間違えて配置してしまったコン...
-
エクセル コントロールツール...
-
'ckbl' コントロールは作成され...
-
OCXって何ですか?
おすすめ情報