Excel VBA以编程方式添加代码userform

时间:2014-11-16 11:49:59

标签: excel vba metaprogramming userform programmatically-created

我的VBA代码遇到了棘手的问题。情况是我有一个手动创建的用户表单。我用宏添加控件到userform,它对我来说很好。但是现在我还需要向userform添加事件代码。以下代码我想添加.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 & "")调用它的文本框的完整路径,但这是一堆代码,我希望避免这种情况。

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的简单方法。我在一个单独的模块中写了所有必要的代码。在那里,我可以解决我需要的所有变量和信息。之后,在创建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