Я работаю над таблицей с элементом управления формой, который открывает Userform, используемый для целей ввода данных. Кнопка отправки формы заполняет ряд ячеек и добавляет две кнопки в последние две ячейки строки. Он будет вставлять столько строк, сколько пользователь делает, и каждый раз, когда две новые кнопки создаются с их собственным именем. Тем не менее, это элементы управления ActiveX, и они дают мне проблемы с совместимостью с другими версиями Windows/Office, когда коллеги открывают файл и пытаются использовать его на своем ноутбуке.Есть ли способ программно добавить элементы управления формой?
Это код, я использую, чтобы добавить одну из командных кнопок в электронной таблице (это по существу то же самое для другой кнопки, просто разные переменные):
Dim i As Long, Hght As Long
Dim Name As String, NName As String
i = 0
Hght = 305.25
NName = "cmdAction" & i
For Each OLEObject In ActiveSheet.OLEObjects
If Left(OLEObject.Name, 9) = "cmdAction" Then
Name = Right(OLEObject.Name, Len(OLEObject.Name) - 9)
If Name >= i Then
i = Name + 1
End If
NName = "cmdAction" & i
Hght = Hght + 27
End If
Next
Dim UpdateEntry As OLEObject, N%
Set UpdateEntry = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False _
, DisplayAsIcon:=False, Left:=Selection.Offset(0, 23).Left, Top:=Selection.Offset(0, 23).Top, Width:=72, Height _
:=24)
UpdateEntry.Name = NName
UpdateEntry.Object.Caption = "Edit Entry"
With ThisWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
N = .CountOfLines
.InsertLines N + 1, "Private Sub " & NName & "_Click()"
.InsertLines N + 2, vbTab & "Code for button goes here"
.InsertLines N + 3, vbTab & "End Sub"
End With
мне было интересно, если это можно было сделать то же самое, но что созданные кнопки - это управление формой вместо ActiveX?
Ошибка, отображаемая во время выполнения Ошибка 32809: Определенная пользователем или объектная ошибка. После обширных исследований я обнаружил, что это происходит из-за повреждения листа, когда другая версия Windows изменила его. Единственный способ исправить это - создать новый лист, скопировать все содержимое на новый лист, удалить поврежденный лист и переименовать его в новое имя. Это работает, но невозможно скопировать элементы управления ActiveX, потому что они будут переименованы и соответствующий код не будет в них, однако элемент управления формы в электронной таблице, используемой для открытия UserForm, будет работать отлично, поэтому я думаю, мое единственное решение - изменить все ActiveX на Form Control.
Поблагодарили бы за помощь.
Никогда не делал ничего подобного конкретно, но используется ли эта ссылка? [link] (http://www.ozgrid.com/Excel/free-training/ExcelVBA2/excelvba2lesson21.htm) Похож, что вам нужен объект.Add – Clusks
Это звучит как начало. Я могу изучить его немного больше, большое спасибо. – user6782845