UserForm变量范围:将2D数组值从userform2传输到userform1

时间:2019-01-22 23:12:14

标签: arrays excel vba userform

我在两个用户表单之间传输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

主要问题是userform1userform2.get2dArray模块中看不到私有变量myArray

userform2设置为全局也是不可能的。

1 个答案:

答案 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