我目前正在尝试改进我从前任工作中继承的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,我需要删除文本并重新开始。
有没有办法将所有这些组合成一段代码,在需要时会创建文本框?
EDIT。
我找到了一种给用户留下印象的方法,即在每个条目之后创建文本框,从用户的角度改进了表单(不再有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
基本上使下一个文本框可见,并向下移动打印按钮以为新文本框腾出空间。它还扩展了窗口。
答案 0 :(得分:0)
你能不能只有2个文本框,一个用于CAND_NO,另一个用于CAND_NAME,然后在这两个框旁边放置一个ADD CAND_NO按钮。
创建一个列表框,按下添加按钮后列出每个CAND_NO / CAND_NAME,以便他们可以看到他们目前已添加的内容。然后遍历您的列表框以构建您的绳索字符串或将您的绳索字符串作为表单上的全局变量,并在它们添加数字时构建它或存储在隐藏文本框中,如果您不添加数字,则存储该值。像全球一样。