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. Но те са обекти. Така че трябва да разбера как да извиквам обекти с име на променлива ;)   -  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