私は現在、職場で前任者から継承した Access データベース VBA を改善しようとしています。私は特定のフォームで立ち往生しています。
現時点では、32個の個別のテキストボックスを含む大きなフォームであり、それぞれの背後に同じコードがありますが、テキストボックスごとに同じコードが繰り返され、テキストボックスへの参照がそれぞれ変更されています。
Private Sub Cand_No2_AfterUpdate()
Cand_Name2 = DLookup("[Name]", "[qryExamAbsences]", "[Cand_No] = Cand_No2")
End Sub
その後、ボタンを押すと
If Not IsNull([Cand_Name1]) Then
Rope = Rope & " Or Cand_No = " & [Cand_No1]
End If
(If ステートメントは、ボタンの mousedown イベントに含まれています。)
各テキスト ボックスで発生し、オフィスで使用するために印刷されるレポートをフィルター処理します。これには多くの問題がありますが、私が解決しようとしている主な問題は、エントリ数に上限があることです。32 を超えるものをフィルタリングする必要がある場合は、テキストを削除して、いわば最初からやり直す必要があります。
これらすべてを、必要に応じてテキスト ボックスを作成する単一のコード セクションに結合する方法はありますか?
編集。
各エントリの後にテキスト ボックスが作成されているという印象をユーザーに与える方法を見つけました。これにより、ユーザーの観点からフォームが改善されました (32 個のテキスト ボックスがなく、印刷ボタンまでスクロールする必要がなくなりました)。ボックスごとに余分なコードを繰り返す必要があったため、コードの乱雑さの問題はまだ解決されていません。また、最大 32 のエントリが残っています。
新しいコードは次のとおりです。
If Not IsNull(Cand_Name1.value) Then
Cand_No2.Visible = True
Cand_Name2.Visible = True
cmdPrint.Top = 2500
cmdPrint.Left = 2500
DoCmd.MoveSize 1440, 2201, , 4000
Else
Cand_No2.Visible = False
Cand_Name2.Visible = False
cmdPrint.Top = 2000
DoCmd.MoveSize 1440, 2201, , 3500
End If
基本的に、次のテキスト ボックスを表示し、印刷ボタンを下に移動して、新しいテキスト ボックス用のスペースを確保します。ウィンドウも拡大します。