VBA:如何验证子表单中的绑定文本框

Posted

技术标签:

【中文标题】VBA:如何验证子表单中的绑定文本框【英文标题】:VBA: how to verify a bound textbox in a subform 【发布时间】:2021-06-02 10:11:45 【问题描述】:

我正在使用 ms-access,并且我有一个表格,其中列出了子表格中的成分,以及产品中成分的百分比(以小数形式,例如 0.4、0.6,其中 1 表示 100%)。我有一个绑定的文本框,显示“百分比”列的总和 (=Sum[Percentage]),这个文本框的名称是 Sum1。 我想要的是主窗体不允许您继续,直到绑定的文本框等于 1。我发现子窗体事件 onExit(在主窗体中访问)就足够了。例如,当您在主窗体中并单击子窗体时,在该文本框等于 1 的总和之前,您应该无法在子窗体外部单击。 我无法弄清楚它的vba代码。如果我这样写代码:

Option Compare Database

Private Sub I_O_Subform_Exit(Cancel As Integer)
If Sum1 <> 1 Then
Cancel = True
MsgBox "Total Percentage must equal to 1"
End If
End Sub

-然后一旦我进入子表单,我根本无法退出,即使文本框等于 1。 我试过这样做:

Private Sub I_O_Subform_Exit(Cancel As Integer)
If Forms!Outputs.I_O_Subform.Sum1 <> 1 Then
Cancel = True
MsgBox "Total Percentage must equal to 1"
End If
End Sub

但我只是收到错误“438”:对象不支持此主体或方法。 如果我这样做了

Private Sub I_O_Subform_Exit(Cancel As Integer)
If I_O_Subform.Sum1 <> 1 Then
Cancel = True
MsgBox "Total Percentage must equal to 1"
End If
End Sub

那么它也不明白。 谁能帮忙? 谢谢

【问题讨论】:

【参考方案1】:

试试这个参考:

If Me!I_O_Subform.Form!Sum1.Value <> 1 Then

其中I_O_Subform 必须是子表单的名称​​控件(可能与子表单的名称不同)。

【讨论】:

不管它是否为 1,它现在都会经历。新代码:Private Sub I_O_Subform_Exit(Cancel As Integer) If Me!I_OSub.Form!Sum1.Value &lt;&gt; 1 Then Cancel = True MsgBox "Total must equal 1" End If End SubI_OSub 是控件的名称 输入一行来检查值:Debug.Print Me!I_OSub.Form!Sum1.Value.

以上是关于VBA:如何验证子表单中的绑定文本框的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Access VBA 将具有默认值的未绑定文本框的值设置为空字符串

VBA验证文本框中是不是存在文本,然后检查日期是不是格式正确

VBA 多文本框验证控件

用于过滤子表单数据表的未绑定文本框

在子报表的子窗体中引用未绑定的文本框

访问表单 VBA ComboBox 点击事件