我遇到了一个我无法弄清的错误。我编写了一个子控件,该子控件在“设计”视图中打开一个表单,删除了所有动态控件,然后添加了所请求的编号。
以两种不同的方式调用子。用户打开表单(通过“主菜单”表单)以填写新表单(以便删除动态控件,然后重新创建)或。创建表单后,用户可以点击表单上的按钮窗体以添加更多的控件行。当单击按钮时,主菜单和按钮形式都调用相同的子 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循环正确迭代,因为我看到它抓住了最后一个动态控件的控件高度。
答案 0 :(得分:2)
您不能这样做。表单或报表只能包含一定数量的控件(无论是否删除),因此-最终-它将不接受更多控件。此时,您必须从头开始重新创建表单。
因此,请勿删除控件。创建您可能需要的那些,并随时隐藏不需要的那些,并在必要时重命名其余部分。