Excel VBA программно добавляет код пользовательской формы

У меня возникла сложная проблема с моим кодом VBA. Ситуация в том, что у меня есть пользовательская форма, созданная вручную. Я добавляю элементы управления в пользовательскую форму с помощью макроса, и он отлично работает для меня. Но теперь мне также нужно добавить код события в пользовательскую форму. Следующий код я хочу добавить с помощью .CodeModule.InsertLines. Важная часть заключается в том, что текстовые поля, которые я хочу вызвать, должны работать по-разному, но это не работает, есть идеи, как это исправить? (Текстовые поля называются так: textbox_0, textbox_1 и последующие)

Dim iMaxColumns As Integer
Dim iCount As Integer 

iMaxColumns = Tabelle4.Cells(8, 2).Value
Dim vArray(0 To iMaxColumns - 1) As String


For iCount = 0 To iMaxColumns - 1
    vArray(iCount) = textbox_ & iCount &.Value
Next

'do sth. with the arrray

Я предполагаю, что проблема в том, что я не могу добавить переменные в свой объект текстового поля. Я также мог бы работать с полным путем к моему текстовому полю, вызывая его с помощью .Designer.Controls("textbox_" & iCount & ""), но это куча кода, и я надеюсь избежать этого.


person Exic    schedule 16.11.2014    source источник
comment
Код, который вы разместили, кажется, не связан с проблемой, которую вы описываете. Вы спрашиваете, как написать этот код в код формы?   -  person RubberDuck    schedule 16.11.2014
comment
@RubberDuck: Нет, я знаю, как написать код в код формы. Мне нужно вызвать Textboxes variabel. Но они объекты. Поэтому мне нужно выяснить, как вызывать объекты по имени variabel;)   -  person Exic    schedule 16.11.2014
comment
Можете ли вы привести пример кода, который вы хотите записать в код позади? Я думаю, что могу помочь, но не очень понимаю, чего вы пытаетесь достичь.   -  person RubberDuck    schedule 16.11.2014
comment
Трудно понять ваш вопрос, но похоже, что вам нужно использовать коллекцию элементов управления формы и метод Add для добавления элементов управления. Затем вы можете получить доступ к элементам управления программно. Вы можете создать пользовательский модуль класса с членом класса MSForms.TextBox, объявленным с помощью WithEvents, а также с любыми обычными обработчиками событий, которые вам нужны. Кроме того, используйте этот метод для создания экземпляра формы, чтобы вы могли возиться с ней: Dim f As UserForm1:Set f = New UserForm1:f.Show   -  person Cool Blue    schedule 16.11.2014


Ответы (1)


Я нашел довольно простой способ решить свою проблему. Я написал весь необходимый код в отдельном модуле. Там я могу обратиться ко всем переменным и информации, которая мне нужна. После этого при создании UserForm я просто копирую весь код в блок кода UserForms.

Public Function edit_userform(strUserForm As String, _
strUserFormEvents As String)
    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent
    Dim VBComp_Event As VBIDE.VBComponent
    Dim strCode As String

    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents(strUserForm)
    Set VBComp_Event = VBProj.VBComponents(strUserFormEvents)

    With VBComp_Event.CodeModule
        strCode = .Lines(1, .CountOfLines)
    End With

    VBComp.CodeModule.AddFromString strCode
End Function
person Exic    schedule 13.12.2014