• ベストアンサー

ACCESSのTabStopについて

ACCESSのTabStopをVBAで制御する方法についての質問です。 メインフォーム「メイン」の中に サブフォーム「サブ」を配置しています。 一時的に「サブ」の中の全てのコントロールに対して TabStopを”いいえ”に設定したいのですが、 VBAで上手くコードが書けません。 ACCESSのバージョンは2000です。 どなたか回答をお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答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は、フォームに配置したサブフォーム/サブレポートの名前です)

-marvel-
質問者

お礼

回答ありがとうございました。 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

その他の回答 (1)

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答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

-marvel-
質問者

お礼

回答ありがとうございます。 今回は「30246kiku」さんの方法で処理しましたが 「DexMachina」さんの 『入力値』テキストボックスが空白かどうかで、タブ移動を切り替える方法も 別の場面で使えそうです。 勉強になりました。 ありがとうございました。

関連するQ&A