VBA 从用户窗体更新公共数组

Posted

技术标签:

【中文标题】VBA 从用户窗体更新公共数组【英文标题】:VBA update public array from userform 【发布时间】:2012-02-02 09:02:27 【问题描述】:

我有一个创建和处理数组的 VBA Sub:

Option Base 1
Public myArr(20, 10) As Variant

Sub ***()
Dim x, y As Integer
    'Put some values to array (only in the first 15 rows)
    For x = 1 To 15
        For y = 1 To 10
            myArr(x, y) = (x * y + 8)
        Next y
    Next x
End Sub

然后有一个带有命令按钮的用户窗体应该能够处理数组 myArr。

Private Sub commandbutton_Click()
Dim a, b As Integer
    'Put some other values in the remaining rows
    For a = 16 To 20
        For b = 1 To 10
            myArr(a, b) = (a * b + 3)
        Next b
    Next a
End Sub

如何将数组传递给用户窗体? Sub 如何查看更新后的数组? 谢谢

【问题讨论】:

目前您正在从用户窗体更新数组的结尾部分。代码不适合你吗?对我来说效果很好 因为'myArr'是公开的,你不需要将它作为参数传递给表单;你可以使用它。因为它是公共的,所以总是可以使用的(数组中包含什么值是另一回事)。 【参考方案1】:

我完成后,您的代码对我来说非常有效。我只能假设您不知道如何调用用户表单。

我将您的 ***() 复制到一个模块中,没有进行任何更改。

到我添加的同一个模块:

Sub Main()

  Dim RowMyArr As Long
  Dim ColMyArr As Long

  Load UserForm1

  Call ***

  UserForm1.Show

  Debug.Print "    ";
  For ColMyArr = LBound(myArr, 1) To UBound(myArr, 1)
    Debug.Print Right("   " & ColMyArr, 4) & " ";
  Next
  Debug.Print

  For RowMyArr = LBound(myArr, 2) To UBound(myArr, 2)
    Debug.Print Right("  " & RowMyArr, 3) & " ";
    For ColMyArr = LBound(myArr, 1) To UBound(myArr, 1)
      Debug.Print Right("   " & myArr(ColMyArr, RowMyArr), 4) & " ";
    Next
    Debug.Print
  Next

End Sub

我创建了一个用户表单,并没有更改 UserForm1 的默认名称。我添加了一个按钮,将其命名为 commandbutton 并将您的代码复制到表单的代码区域。在End Sub 之前,我添加了Unload UserForm1 以关闭并退出表单。

我运行了 Main 并在即时窗口中输出了以下内容:

       1    2    3    4    5    6    7    8    9   10   11   12   13   14   15   16   17   18   19   20 
  1    9   10   11   12   13   14   15   16   17   18   19   20   21   22   23   19   20   21   22   23 
  2   10   12   14   16   18   20   22   24   26   28   30   32   34   36   38   35   37   39   41   43 
  3   11   14   17   20   23   26   29   32   35   38   41   44   47   50   53   51   54   57   60   63 
  4   12   16   20   24   28   32   36   40   44   48   52   56   60   64   68   67   71   75   79   83 
  5   13   18   23   28   33   38   43   48   53   58   63   68   73   78   83   83   88   93   98  103 
  6   14   20   26   32   38   44   50   56   62   68   74   80   86   92   98   99  105  111  117  123 
  7   15   22   29   36   43   50   57   64   71   78   85   92   99  106  113  115  122  129  136  143 
  8   16   24   32   40   48   56   64   72   80   88   96  104  112  120  128  131  139  147  155  163 
  9   17   26   35   44   53   62   71   80   89   98  107  116  125  134  143  147  156  165  174  183 
 10   18   28   38   48   58   68   78   88   98  108  118  128  138  148  158  163  173  183  193  203 

我没有检查这些值,但我认为它们是正确的。

【讨论】:

你的答案和我的意思一样简单!非常感谢!【参考方案2】:

它是一个公共数组,可以从应用程序中的任何形式访问。 . .为什么你仍然需要通过它? 这一篇描述了如何在access vba中将参数传递给表单。

Passing parameters between forms in MS Access

【讨论】:

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

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

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

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

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

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

如何在VBA中的用户窗体上使用组合框和文本框来搜索和查找活动Excel电子表格中的数据?