UserForm 变量范围:将 2D 数组值从 userform2 传输到 userform1
UserForm variable scope: transfer 2D array values from userform2 to userform1
我在两个用户窗体之间传输二维数组时遇到问题。
当我单击 userform1
中的 CommandButton 时,它将打开 userform2
。然后我单击 userform2
中的 CommandButton 以创建二维数组。在此之后我终止 userform2
并想将我的二维数组转移到 userform1
.
我最好的尝试是在 userform1
单击事件中调用一个函数。我把这个函数放到了 userform2
模块中。但是我的 userform2
的函数在 userform2
中看不到另一个 subs 的二维数组。 Private Sub userform_terminate()
可以看到这个在 Private Sub CommandButton1_Click()
中创建的二维数组,但我的函数看不到。
用户表单 1:
Private Sub CommandButton1_Click()
dim results()
results = userform2.get2dArray()
End Sub
用户表单2:
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
全局化也是不可能的。
在标准模块(而不是用户窗体)中使用 public 函数,该函数采用可选参数(您的二维数组)。
然后将参数作为 static variable 存储在函数中。下次调用该函数时,如果参数丢失,则 return 存储的静态变量。这是示例:
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
我在两个用户窗体之间传输二维数组时遇到问题。
当我单击 userform1
中的 CommandButton 时,它将打开 userform2
。然后我单击 userform2
中的 CommandButton 以创建二维数组。在此之后我终止 userform2
并想将我的二维数组转移到 userform1
.
我最好的尝试是在 userform1
单击事件中调用一个函数。我把这个函数放到了 userform2
模块中。但是我的 userform2
的函数在 userform2
中看不到另一个 subs 的二维数组。 Private Sub userform_terminate()
可以看到这个在 Private Sub CommandButton1_Click()
中创建的二维数组,但我的函数看不到。
用户表单 1:
Private Sub CommandButton1_Click()
dim results()
results = userform2.get2dArray()
End Sub
用户表单2:
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
全局化也是不可能的。
在标准模块(而不是用户窗体)中使用 public 函数,该函数采用可选参数(您的二维数组)。
然后将参数作为 static variable 存储在函数中。下次调用该函数时,如果参数丢失,则 return 存储的静态变量。这是示例:
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