![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access サブフォームでの選択行...
-
Access 複数フォームを...
-
AccessのFormのみをスクリーン...
-
サブフォームが見えなくなる。
-
googleフォームでインストール...
-
accessのサブフォームの並び替...
-
Access2000 サブフォームのReco...
-
別MDBのフォームを起動
-
保存されない理由は?accessvba
-
Accessのサブフォーム内で連続...
-
Accessでサブフォームの中の並...
-
サブフォームでのダブルクリッ...
-
Access2000、これはいったい・...
-
レコードセットで得た結果をサ...
-
アクセスで サブフォームの表...
-
access 直前まで開いていたフォ...
-
Accessで、一覧からクリックし...
-
Access ウィンドウサイズの変更
-
ACCSESS2013VBA フォームのレコ...
-
AccessのDoCmd.ApplyFilterの使...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access サブフォームでの選択行...
-
ACCSESS2013VBA フォームのレコ...
-
Access 複数フォームを...
-
Access2000、これはいったい・...
-
Accessのサブフォームから値を...
-
access サブフォームにリストを...
-
サブフォームでのダブルクリッ...
-
Access2000 サブフォームのReco...
-
(ACCESS)条件に応じて、テキ...
-
サブフォームが見えなくなる。
-
2回目に画面のレコードセットの...
-
サブフォームのデータを保存す...
-
Accessで、一覧からクリックし...
-
Accessでのフォーム表示がうま...
-
AccessのFormのみをスクリーン...
-
ACCESSでfilterとorderbyについて
-
サブフォームでフィルタしたデ...
-
レコードセットで得た結果をサ...
-
アクセスでサブフォームのレコ...
-
初心者です。accessで請求書を...
おすすめ情報