我在两个用户表单之间传输2D数组时遇到问题。
当我单击userform1
中的 CommandButton 时,它将打开userform2
。然后,单击userform2
中的 CommandButton 以创建2D数组。之后,我终止了userform2
,并想将我的2D数组转移到userform1
中。
我最好的尝试是在userform1
click事件中调用一个函数。我将此函数放入userform2
模块中。但是我的userform2
的函数看不到userform2
中另一个子的2D阵列。 Private Sub userform_terminate()
可以看到在Private Sub CommandButton1_Click()
中创建的2D数组,但是我的函数没有。
userform1:
Private Sub CommandButton1_Click()
dim results()
results = userform2.get2dArray()
End Sub
userform2:
Private myArray()
Private Sub CommandButton1_Click()
ReDim myArray(1 To 2, 1 To 2)
myArray(1, 1) = "arg1"
myArray(2, 1) = "arg2"
myArray(1, 2) = "arg3"
myArray(2, 2) = "arg4"
End Sub
Private Sub userform_terminate()
'here i can see every args in myArray
...
end sub
Function get2dArray()
'that function I called from userform1
userform2.show vbModal
get2dArray = myArray 'but myArray is empty
End Function
我想将myArray
的{{1}}转移回主要形式userform2
。
主要问题是userform1
在userform2.get2dArray
模块中看不到私有变量myArray
。
将userform2
设置为全局也是不可能的。
答案 0 :(得分:2)
在带有可选参数(您的2D数组)的标准模块(而不是用户窗体)中使用公共功能。
该参数然后以static variable的形式存储在函数中。下次调用该函数时,如果缺少参数,则返回存储的静态变量。这是示例:
Public Function store2DArray(Optional my2DArray As Variant) As Variant
Static storedArray As Variant
If IsMissing(my2DArray) Then
store2DArray = storedArray
Else
storedArray = my2DArray
End If
End Function
然后使用该命令来存储数组:
Sub Userform2Button1_Click()
store2DArray myArray
End Sub
这是您检索数组的方式:
Sub Userform1Button2_Click()
myArray = store2DArray
End Sub