0

私は現在、職場で前任者から継承した 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

基本的に、次のテキスト ボックスを表示し、印刷ボタンを下に移動して、新しいテキスト ボックス用のスペースを確保します。ウィンドウも拡大します。

4

1 に答える 1

0

CAND_NO 用と CAND_NAME 用の 2 つのテキスト ボックスを用意し、その 2 つのボックスの横に [ADD CAND_NO] ボタンを配置することはできませんか。

追加ボタンを押した後にすべての CAND_NO / CAND_NAME をリストするリスト ボックスを作成して、これまでに追加したものを確認できるようにします。次に、リスト ボックスをループしてロープの文字列を作成するか、ロープの文字列をフォームのグローバル変数にして数値を追加するときに作成するか、気に入らない場合は数値を追加するときに値を格納する非表示のテキスト ボックスに格納します。グローバル。

于 2012-05-29T16:43:23.173 に答える