Ms access Access VBA:此应用程序已请求运行时

Ms access Access VBA:此应用程序已请求运行时,ms-access,vba,Ms Access,Vba,运行VBA宏时,有时效果很好。但在某些情况下,我会得到以下错误 我已经调试了代码,但没有收到任何错误。代码如下 Public Sub Adjust_ComboBox() On Error GoTo Adjust_ComboBox_Err Dim mes As Form Set mes = [Form_Treatment Details] Dim count As Long On Error Resume Next For Each ctl In m

运行VBA宏时,有时效果很好。但在某些情况下,我会得到以下错误

我已经调试了代码,但没有收到任何错误。代码如下

Public Sub Adjust_ComboBox()
On Error GoTo Adjust_ComboBox_Err

    Dim mes As Form
    Set mes = [Form_Treatment Details]


    Dim count As Long
    On Error Resume Next
    For Each ctl In mes.Detail.Controls
        If TypeName(ctl) = "ComboBox" Then
            Dim comboitems() As Variant
            count = 1
            comboitems = ctl.Value
            count = UBound(comboitems) + 1
            ctl.Height = (300 * count)
            Erase comboitems
        End If
    Next


Adjust_ComboBox_Exit:
    Exit Sub

Adjust_ComboBox_Err:
    MsgBox Error$
    Resume Adjust_ComboBox_Exit

End Sub

怎么可能出现这个错误呢?

我觉得这整段代码都很奇怪

Dim comboitems() As Variant
count = 1
comboitems = ctl.Value
count = UBound(comboitems) + 1
ctl.Height = (300 * count)
Erase comboitems
我的问题是:

  • 为什么要在循环中减少和删除组合项
  • 为什么要将数组设置为控件的值
  • 是否尝试根据项目数设置高度
  • 当它被覆盖两行时,为什么要设置
    count=1
    以后
如果我对这些问题的答案猜对了,我认为您可以通过精简循环代码和使用ListCount来消除一些可能的崩溃:

count = ctl.ListCount
if count > 0 then
    ctl.Height = (300 * count)
else
    ctl.Height = 300
end if

在错误恢复下一步
隐藏您可能收到的任何VBA错误消息-发生的一切是它试图执行一行,由于错误而无法执行,因此它将转到下一行,而下一行通常无法执行,因为前一行有错误等等-由于您告诉它不要显示的错误,您预期不会发生任何事情。在如何引用表单方面也很有帮助。除了Darren的注释外,您应该使用Set mes=form\u Treatment\u Details。您混合了两种对象命名方法,在将名称引用为具有空格的字符串(如“[Treatment Details]”)或类的子类(如Forms)时使用括号。[Treatment Details]VBA将空格替换为对象名称的u字符,并将表单u附加到表单的开头。在对象资源管理器中查找VBA使用的特定名称。