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 从用户窗体更新公共数组的主要内容,如果未能解决你的问题,请参考以下文章