我在两个用户表单之间传输2D数组时遇到了问题。
当我单击CommandButton in userform1时,它将打开userform2。然后,我单击CommandButton在userform2中创建一个2D数组。在此之后,我终止了userform2,并希望将我的2D数组转换为userform1。
我最好的尝试是在userform1单击事件中调用一个函数。我将这个函数放入userform2模块中。但是我的userform2函数没有从userform2中的其他子类中看到2D数组,Private Sub userform_terminate()可以看到这个2D数组,它是用Private Sub CommandButton1_Click()创建的,但我的函数没有。
userform1:
Private Sub CommandButton1_Click()
dim results()
results = userform2.get2dArray()
End Subuserform2:
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从userform2传输回主表单userform1。
主要问题是userform2.get2dArray没有在userform2模块中看到私有变量myArray。
让myArray全球化也是不可能的。
发布于 2019-01-22 23:53:51
使用标准模块(而不是用户表单)中的公共函数,该模块接受可选参数(您的2D数组)。
然后将参数作为静态变量存储在函数中。下次调用函数时,如果缺少参数,则返回存储的静态变量。下面是一个例子:
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 Subhttps://stackoverflow.com/questions/54317798
复制相似问题