0

我目前正在尝试改进我从工作中的前任那里继承的 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

本质上使下一个文本框可见并向下移动打印按钮以为新文本框腾出空间。它还扩大了窗口。

4

1 回答 1

0

你能不能只有 2 个文本框,一个用于 CAND_NO,另一个用于 CAND_NAME,然后在这两个框旁边放置一个 ADD CAND_NO 按钮。

创建一个列表框,在他们按下添加按钮后列出每个 CAND_NO / CAND_NAME,这样他们就可以看到他们到目前为止添加的内容。然后遍历您的列表框以构建您的绳索,或者将您的绳索作为表单上的全局变量并在它们添加数字时构建它,或者存储在隐藏的文本框中,如果您不喜欢,它们会在添加数字时存储值全球的。

于 2012-05-29T16:43:23.173 回答