• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コードに無駄が多すぎる気がする)

コードに無駄が多すぎる気がする

このQ&Aのポイント
  • フォーム上のコントロールをタブインデックス順に取得するコードに無駄が多すぎると感じる。
  • 現在のコードでは、フォームをループして一つずつコントロールを見ているが、簡略化できないか検討したい。
  • より効率的な方法でフォーム上のコントロールを取得する方法を教えてほしい。

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

  • ベストアンサー
  • sean9
  • ベストアンサー率86% (26/30)
回答No.3

No.2 30246kikuさんのおっしゃる通り、フォームのコントロールを全部だとごちゃごちゃになる気がします。が、そのへんはうまいことやってくれるものとして、前に進みます。 ■概要 フォームの中のコントロールをリストで取得 → TabIndexでソート ■使い方 フォームからのコールであれば _controls = GetTabIndexes(Me) ■ソース 'ソートのデリゲード Private Function TabIndexCompare(ByVal c1 As Control, ByVal c2 As Control) As Integer  Return c1.TabIndex - c2.TabIndex End Function 'フォームに含まれるコントロールをタブインデックス順に示す Private Function GetTabIndexes(ByVal form As Form)  Dim controls As New List(Of Control)  For Each c As Control In Me.Controls   controls.Add(c)  Next  controls.Sort(AddressOf TabIndexCompare)  Return controls End Function

wcjiagcnk4
質問者

お礼

ありがとうございます。

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

TabIndex は、Section 毎に 0 ~ 連番で振られるようです。 なので、フォームの Controls を対象にすると、ごちゃごちゃになると思います。 ヘッダ、詳細、フッタに分けて、単に TabIndex 順にコントロール名を表示・・・ たぶん以下でいけるかと(未検証) Public Sub Sample()   Dim dic As Object   Dim ctl As Control   Dim v As Variant   Dim i As Long   Const StrFormName As String = "SampleCode_SubForm"   DoCmd.OpenForm StrFormName, acDesign   On Error Resume Next   Set dic = CreateObject("Scripting.Dictionary")   With Forms(StrFormName)     For Each v In Array(1, 0, 2)       dic.RemoveAll       For Each ctl In .Section(v).Controls         Err = 0         i = ctl.TabIndex         If (Err = 0) Then dic.Item(i) = ctl.Name       Next       Debug.Print "> Section(" & v & ") TabIndex 順のコントロール名"       For i = 0 To dic.Count - 1         Debug.Print i, dic.Item(i)       Next     Next   End With   Set dic = Nothing End Sub ※ 不都合あれば修正してください

wcjiagcnk4
質問者

お礼

ありがとうございます。

  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

VBはよくわからないですが、 Controls.Countでコントロールの総数が取得できるなら、 1.最初にコントロール数分サイズの配列を作成 2.全コントロールを繰り返し処理で取得し、取得したtabIndex番目の配列に入れる 3.tabIndex順の配列が出来上がり。 とかじゃないんですかね? 重複・欠番・総数以上のtabIndex番号を考慮する必要はありますが。

wcjiagcnk4
質問者

お礼

ありがとうございます。

関連するQ&A