我目前正在尝试改进我从工作中的前任那里继承的 Access Database 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
本质上使下一个文本框可见并向下移动打印按钮以为新文本框腾出空间。它还扩大了窗口。