首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UserForm变量作用域:将2D数组值从userform2传输到userform1

UserForm变量作用域:将2D数组值从userform2传输到userform1
EN

Stack Overflow用户
提问于 2019-01-22 23:12:14
回答 1查看 57关注 0票数 2

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

代码语言:javascript
复制
Private Sub CommandButton1_Click()
    dim results()     
    results = userform2.get2dArray()
End Sub

userform2:

代码语言:javascript
复制
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

我想将myArrayuserform2传输回主表单userform1

主要问题是userform2.get2dArray没有在userform2模块中看到私有变量myArray

myArray全球化也是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-22 23:53:51

使用标准模块(而不是用户表单)中的公共函数,该模块接受可选参数(您的2D数组)。

然后将参数作为静态变量存储在函数中。下次调用函数时,如果缺少参数,则返回存储的静态变量。下面是一个例子:

代码语言:javascript
复制
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

然后使用如下方式来存储数组:

代码语言:javascript
复制
Sub Userform2Button1_Click()
     store2DArray myArray
End Sub

以下是检索数组的方式:

代码语言:javascript
复制
Sub Userform1Button2_Click()
    myArray = store2DArray
End Sub
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54317798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档