No.1ベストアンサー
- 回答日時:
以下のコードで(自身の)フォーム上のコントロールを操作できます。
Name でコントロール名
ControlType で種別 (ヘルプに詳しく載ってます)
TabStop は、True/False で
必要に応じて判別、設定してみてください。
Dim ctl As Control
Dim sTmp As String
sTmp = ""
For Each ctl In Me.Controls
sTmp = ctl.Name & vbNewLine
Select Case ctl.ControlType
Case acComboBox
sTmp = sTmp & "コンボボックス" & vbNewLine
Case acListBox
sTmp = sTmp & "リストボックス" & vbNewLine
Case acTextBox
sTmp = sTmp & "テキストボックス" & vbNewLine
Case acToggleButton
sTmp = sTmp & "トグルボタン" & vbNewLine
Case acCommandButton
sTmp = sTmp & "コマンドボタン" & vbNewLine
Case Else
sTmp = sTmp & "その他" & vbNewLine
End Select
MsgBox sTmp & ctl.TabStop
Next
対サブフォームであれば、
For Each ctl In Me.Controls を
For Each ctl In Me.FSUB.Form.Controls に
(FSUBは、フォームに配置したサブフォーム/サブレポートの名前です)
回答ありがとうございました。
select case とfor each を組み合わせる方法を
参考にさせていただいて
以下の通り、やりたかったことが実現できました。
とっても助かりました。
ありがとうございました。
'Tab移動不可
sTmp = ""
For Each ctrl In Me.詳細.Controls
sTmp = ctrl.Name
Select Case ctrl.ControlType
Case acTextBox ’テキストボックスなら
sTmp = ctrl.Name
Me(sTmp).TabStop = False
End Select
Next
No.2
- 回答日時:
今回のようにTabStopの「はい/いいえ」の切替だけなら、以下のような方法もあります。
(コントロールの種類によって、より細かい制御を行う場合は、No.1の方のように
Select Case を使うのが正当ですが)
◆コメントのせいで行数が多くなっていますが、コード本体はほんの数行です。
Private Sub Test1()
'エラーが発生した場合は「エラー処理」に飛ばす
On Error Goto エラー処理
Dim Cntl As Control, PrpVal As Boolean
'『入力値』テキストボックスが空白かどうかで、タブ移動を切り替える場合
'(TabStopプロパティへの、Len関数の演算結果の代入により、文字長が
' 0なら「いいえ(False)」、それ以外は「はい(True)」扱いになります)
PrpVal = Len(入力値 & "")
'『サブ』サブフォーム内の全コントロールのタブ移動を切替
For Each Cntl In Me!サブ.Controls
Cntl.TabStop = PrpVal
Next
終了処理:
'念のため、明示的にメモリを解放
Set Cntl = Nothing
Exit Sub
エラー処理:
Select Case Err
Case 438
'ラベルなど、TabStopプロパティを持たないコントロールへの代入に
'よるエラー →無視して処理を継続
Resume Next
Case Else
'上記以外のエラー →メッセージを表示
MsgBox Err & ":" & Error$, , Me.Name & " Test1"
Resume 終了処理
End Select
End Sub
・・・ところで、本当に必要な処理は、サブフォームのコントロールのTabStop
なのでしょうか。
もしも「ある条件の下では、サブフォームへのタブ移動はさせないようにしたい」
ということだとすると、サブフォーム内のコントロールのTabStopを制御しても、
解決しません。
この場合は、コントロールとしてのサブフォームのTabStopを「いいえ」(False)に
設定してやる必要があります(サブフォーム内のコントロールは切替不要です)。
※場合によっては、サブフォームのEnabledプロパティを「いいえ」にしてやる、
という手もあります。
(但しこの場合は、予めフォーカスをサブフォーム外に出す必要あり)
Private Sub Test2()
On Error Goto エラー処理
サブ.TabStop = (Nz(入力値, "") = "")
終了処理:
Exit Sub
エラー処理:
MsgBox Err & ":" & Error$, , Me.Name & " Test2"
Resume 終了処理
End Sub
回答ありがとうございます。
今回は「30246kiku」さんの方法で処理しましたが
「DexMachina」さんの
『入力値』テキストボックスが空白かどうかで、タブ移動を切り替える方法も
別の場面で使えそうです。
勉強になりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Accessで、サブフォームのある...
-
ACCESS サブフォームのフィール...
-
(ACCESS)条件に応じて、テキ...
-
サブフォームのデータを保存す...
-
Accessのサブフォームから値を...
-
Accessでのフォーム表示がうま...
-
googleフォームでインストール...
-
Access2000 サブフォームのReco...
-
Access2000、これはいったい・...
-
Access 複数フォームを...
-
AccessのDoCmd.ApplyFilterの使...
-
ACCSESS2013VBA フォームのレコ...
-
エクセルで、抽出したデータだ...
-
Accessでフォームに自動入力し...
-
ソフトの製品コードを知りたい
-
ACCESS 複数のフォームから同一...
-
AccessでIDを入力したら他の項...
-
インデックスまたは主キーにはn...
-
Accessでレコードの複製
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access2000、これはいったい・...
-
Access 複数フォームを...
-
ACCSESS2013VBA フォームのレコ...
-
(ACCESS)条件に応じて、テキ...
-
サブフォームが見えなくなる。
-
サブフォームでのダブルクリッ...
-
Access2000 サブフォームのReco...
-
Accessのサブフォームから値を...
-
AccessのFormのみをスクリーン...
-
googleフォームでインストール...
-
access サブフォームにリストを...
-
2回目に画面のレコードセットの...
-
レコードセットで得た結果をサ...
-
サブフォームのデータを保存す...
-
AccessのDoCmd.ApplyFilterの使...
-
Access VBA acCmdSelectRec...
-
アクセスでサブフォームのレコ...
-
アクセスで サブフォームの表...
-
Accessのサブフォーム内で連続...
おすすめ情報