我在Access中使用两个TextBox创建了一个表单.Form的属性RecordSource和其中一个文本框的ControlSource都设置了初始属性。
当用户单击位于同一表单上的按钮时,表单的RecordSource属性以及文本框的ControlSource属性应更改为其他源。
我通过将ControlSource设置为初始属性来测试ControlSource的Source(应该在按钮单击时应该更改的源)。但是,当我尝试以编程方式执行此操作时,它无效。任何帮助,将不胜感激。我正在使用Access 2000.代码如下所示:
背后的代码
Private Sub Dry_Type_Click()
Me.RecordSource = "Engineering Schedule2"
Dim strcatnum As String
Dim param As String
strcatnum = "5203"
param = "Catalog Number Log " & strcatnum
catnumbox.ControlSource = "=DLookup(""[Catalog Number]""," & param & ",""[Sequence No]="" & [Sequence Number])"
End Sub
答案 0 :(得分:1)
VBA设置时不会触发大多数事件。您应该将要求放在程序中,并在任何所需的事件或程序中调用该程序。
答案 1 :(得分:1)
catnumbox.ControlSource =“= DLookup(”“[目录编号]”“,”“目录编号Log 5203”“,”“[序列号] =”“& [序列号])”
答案 2 :(得分:1)
您无需在运行时更改ControlSource。您可以在设计时完成所有操作,无需在控制源之外使用任何VBA,也无需将任何引号加倍。
假设您的5203来自文本框txtLogNum。它可以是绑定的或不绑定的。
在设计时,将catnumbox的ControlSource设置为:
=DLookup("[Catalog Number]",
"Catalog Number Log " & [txtLogNum],
"[Sequence No]=" & [Sequence Number])
现在,只要[Sequence Number]或[txtLogNum]发生变化,Access就会重新评估catnumbox。
编辑 - 添加了另一个例子
如果您不想在用户单击[Dry Type]之前更改catnumbox,则在设计时将ControlSource留空。在ControlSource中使用表达式的主要原因是它会自动重新计算。
此VBA还会解决您对两个组合框的评论。
Private Sub Dry_Type_Click()
Dim LogTableName As String
Me.RecordSource = "Engineering Schedule2"
LogTableName = "Catalog Number Log " & _
[cboLogNumPart1] & _
[cboLogNumPart2]
catnumbox.Value = DLookup("[Catalog Number]", LogTableName, _
"[Sequence No]=" & [Sequence Number])
End Sub
不会 做的是触发任何基于catnumbox值的事件或任何重新计算。