从用户窗体 vba 加载的公共数组

Posted

技术标签:

【中文标题】从用户窗体 vba 加载的公共数组【英文标题】:public array loaded from useform vba 【发布时间】:2015-08-11 01:51:46 【问题描述】:

我正在创建一个宏,我需要访问在模块中创建并填写在 useform (button_click action) 中的数组。

Private Sub CommandButton1_Click()

Dim tmojo As Worksheet
Dim mojocell As Range

Set tmojo = Sheets("table mojo")
colls = tmojo.Range("N1").End(xlToLeft).Column

i = 1
For Each cCont In Me.Controls

 If TypeName(cCont) = "ComboBox" Then
    If cCont.Enabled = True Then
        If cCont.Value = Empty Then
            MsgBox "you havent specified all the columns"
            Exit Sub
        End If

        ReDim Preserve collname(i)
        collname(i) = cCont.Value
        i = i + 1
    End If
 End If
Next cCont

Call createregion


End Sub

我用来自多个组合框(列名)的值填充数组 collname。然后我想调用位于模块中的 createregion sub 并且我想访问 collname() 中的值。 我收到错误消息:

Constants, fixed-length strings, arrays, user-defined types, and Declare statements not allowed as Public members of an object module

我需要在多个 subs 中访问这个数组,有什么解决方法吗?

谢谢你。

【问题讨论】:

【参考方案1】:

正确的方法是将您的 UserForm 代码转移到常规模块中,并将您的数组声明为 public,在模块顶部,在每个 subs 之前:

Public MyArr()

当您传输代码时,您需要将 subs 调用到您的用户窗体的事件中,因此 将所有 MeMe. 更改为您的用户窗体的全名

如果你没有时间,你可以简单地在 UserForm 模块的顶部声明:

Dim MyArr()

【讨论】:

以上是关于从用户窗体 vba 加载的公共数组的主要内容,如果未能解决你的问题,请参考以下文章

加载 VBA 用户窗体时没有足够的内存崩溃

从用户窗体到模块的公共数组是空的,但在用户窗体内部它获取值

为啥从标准模块(而不是用户窗体)调用 VBA 代码时运行得更快?

如何使用 VBA 从 Excel 用户窗体中读取复选框的值

c#如何在一个窗体中调用另一个窗体的数组对象

VBA:如果工作簿中的工作表名称等于从用户窗体中选择的组合框值,则复制该工作表并将其粘贴到另一个工作簿中