我在vba Access中有一个文本框。当我设置ControlSource属性使用Design时,它可以工作。但是,如果我尝试以编程方式进行,则不会

时间:2014-12-22 16:57:54

标签: vba ms-access access-vba

我在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

3 个答案:

答案 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值的事件或任何重新计算。