Я получаю ошибку, которую просто не могу понять. Я написал подпрограмму, которая открывает форму в режиме конструктора, удаляет все динамические элементы управления, а затем добавляет запрошенный номер.
Подсказка вызывается двумя разными способами. Пользователь, открывающий форму (через форму главного меню), чтобы заполнить новую форму (чтобы динамические элементы управления были удалены, а затем воссозданы) ИЛИ после создания формы, пользователь может нажать кнопку на форме добавить больше строк элементов управления. Как в главном меню, так и в форме кнопок вызывается одна и та же подпрограмма, НО при нажатии кнопки код застревает, и возникает ошибка 29054 ' Microsoft Access не может добавлять, переименовывать или удалять элементы управления. ) вы просили. 'брошено. Кнопка для отладки деактивирована, поэтому я не вижу, какая строка на самом деле застревает, но когда я перехожу через код, это последняя строка перед появлением ошибки (последний блок отступа в контексте ниже):
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 выполняет итерацию правильно, так как я вижу, как он захватывает высоту элемента управления последнего динамического элемента управления.