VBA从userform更新公共数组

时间:2012-02-02 09:02:28

标签: vba multidimensional-array excel-vba parameter-passing userform

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

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

Sub Stackoverflow()
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

如何将数组传递给userform?以及Sub如何查看更新的阵列? 感谢

2 个答案:

答案 0 :(得分:0)

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

我将您的Stackoverflow()复制到了一个没有更改的模块。

在我添加的同一模块中:

Sub Main()

  Dim RowMyArr As Long
  Dim ColMyArr As Long

  Load UserForm1

  Call Stackoverflow

  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 

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

答案 1 :(得分:-1)

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

Passing parameters between forms in MS Access