从一个子控件调用另一个子控件时,添加控件的子控件起作用

时间:2019-06-26 11:43:36

标签: ms-access access-vba

我遇到了一个我无法弄清的错误。我编写了一个子控件,该子控件在“设计”视图中打开一个表单,删除了所有动态控件,然后添加了所请求的编号。

以两种不同的方式调用子。用户打开表单(通过“主菜单”表单)以填写新表单(以便删除动态控件,然后重新创建)。创建表单后,用户可以点击表单上的按钮窗体以添加更多的控件行。当单击按钮时,主菜单和按钮形式都调用相同的子 BUT ,并且代码卡住并且错误29054' Microsoft Access无法添加,重命名或删除控件( s)。'被抛出。调试按钮处于停用状态,因此我看不到实际上哪行被卡住,但是当我单步执行代码时,这是错误弹出之前的最后一行(以下上下文中的最后一个缩进块):

    With Application.CreateControl("BOM5", acComboBox, acDetail, frm.Controls("Tabs").Pages(PageNum).Name, , ChangeTypeLeft, LastControlTop, ChangeTypeWidth, ControlHeight)

其余代码如下。

    DoCmd.OpenForm "BOM5", acDesign
    Set frm = Application.Forms("BOM5")

    ' Cycle through controls and set LastControlTop based on the last dynamic control, if any
    For i = 0 To frm.Controls.Count - 1
        Set ctl = frm.Controls(i)
        Debug.Print ctl.Name
        If ctl.Tag Like DYNAMIC_TAG & "*" Then
            If ctl.ControlType = acComboBox Or ctl.ControlType = acTextBox Then
                LastControlTop = ctl.Top + ControlHeight + ControlPadding
                FormRowCount = FormRowCount + 1
            End If
        Else
            FormRowCount = (FormRowCount / 6) + 1      ' Convert number of fields to number of rows then add one to start new batch of controls

            Exit For
        End If
    Next

    PageNum = frm.Controls("Tabs").Pages.Count - 1      ' .Pages has an index of 0. Getting PageNum to follow suit with the -1

    ' Add controls for inputting parts
    For FormRowCount = FormRowCount To NewControlCount
        With Application.CreateControl("BOM5", acComboBox, acDetail, frm.Controls("Tabs").Pages(PageNum).Name, , ChangeTypeLeft, LastControlTop, ChangeTypeWidth, ControlHeight)
            .Name = "ChangeType" & FormRowCount
            .Tag = DYNAMIC_TAG
            .RowSourceType = "Table/Query"
            .RowSource = "ChangeType"
        End With

最后一个for循环还有5个With Application.CreatControl语句,但是我只显示了第一个。除文本框而不是组合框外,其他5个相似。

我以前有这个错误,但是我想我通过将DoCmd.OpenForm语句移到代码的不同部分(例如,从if语句或for循环中或不允许它获取的地方)中解决了该错误打电话),但我认为这不会解决。此外,第一个for循环正确迭代,因为我看到它抓住了最后一个动态控件的控件高度。

1 个答案:

答案 0 :(得分:2)

您不能这样做。表单或报表只能包含一定数量的控件(无论是否删除),因此-最终-它将不接受更多控件。此时,您必须从头开始重新创建表单。

因此,请勿删除控件。创建您可能需要的那些,并随时隐藏不需要的那些,并在必要时重命名其余部分。