【问题标题】:Excel VBA add code userform programmaticallyExcel VBA以编程方式添加代码用户表单
【发布时间】:2015-01-13 09:57:02
【问题描述】:

我的 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 & "") 调用它,但这是一堆代码,我希望避免这种情况。

【问题讨论】:

  • 您发布的代码似乎与您描述的问题无关。您是在问如何将该代码写入表单的代码后面?
  • @RubberDuck:不,我知道如何将代码写入表单的代码。我需要调用文本框变量。但它们是对象。所以我需要弄清楚如何在变量名称上调用对象;)
  • 你能提供一个你想写到后面代码中的代码的例子吗?我想我可以提供帮助,但不清楚您要完成什么。
  • 很难理解您的问题,但听起来您需要使用表单的控件集合和添加方法来添加控件。然后,您可以以编程方式访问控件。您可以使用类 MSForms.TextBox 的成员创建自定义类模块,使用 WithEvents 以及您需要的任何常见事件处理程序声明。另外,使用这个方法来实例化表单,这样你就可以搞砸了:Dim f As UserForm1:Set f = New UserForm1:f.Show

标签: excel vba metaprogramming userform programmatically-created


【解决方案1】:

我想出了一个非常简单的方法来解决我的问题。我在一个单独的模块中编写了所有必要的代码。在那里我可以解决我需要的所有变量和信息。之后,在创建用户窗体时,我只需将所有代码复制到用户窗体代码块中。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多