2016-02-22 12 views
1

我有一个问题修改数组的值声明为public。修改值到公共数组不起作用

因此,有我的代码:

在UserForm1的声明

Public MyArray as Variant

在 “私人小组UserForm_activate()” 我有:

MyArray = Array(0, 0, 0, 0, 1) 

直到那里它的工作


在UserForm3我:

Private Sub CheckBox1_Click() 
If UserForm1.MyArray(4) = 1 Then 
    UserForm1.MyArray(0) = 1 
    UserForm1.MyArray(4) = 0 
ElseIf UserForm1.MyArray(0) = 1 Then 
    UserForm1.MyArray(0) = 0 
    UserForm1.MyArray(4) = 1 
End If 
End Sub 

当我调试我看到MYARRAY(0)例如从未更改为1个

我一向都采用公共变量,这是工作,但不能与数组的

阅读数组是OK,但不能修改数值...

你有什么想法吗?

感谢,

+2

公众myArray的不属于UserForm1所以为什么它被称为' UserForm1.MyArray(4)'?对此,你怎么用这种方式?你在每个工作表的顶部有[Option Explicit](https://msdn.microsoft.com/en-us/library/y9341s4f.aspx)吗?如果不使用VBE的工具►选项►编辑器►需要变量声明将其放在那里。 – Jeeped

+0

我在UserForm1的顶部声明了myArray。 –

+0

这是如何使其成为UserForm1的成员? “Option Explicit”要求的状态是什么? – Jeeped

回答

0

这可以声明数组私人时实现和创造像获取/设置MyArrayValue功能。然后,UserForm1创建UserForm3后,Parent属性将被设置,以便UserForm3可以访问Get/Set MyArray的UserForm1函数。 HTH

UserForm1 - 父窗体

Option Explicit 

Private m_MyArray As Variant 
Private m_childForm As UserForm3 

Private Sub CommandButton1_Click() 
    m_childForm.Show 
End Sub 

Private Sub UserForm_Initialize() 
    Set m_childForm = New UserForm3 
    Set m_childForm.MyParent = Me 
    m_MyArray = Array(0, 0, 0, 0, 1) 
End Sub 

Public Function GetMyArrayValue(index) As Variant 
    GetMyArrayValue = m_MyArray(index) 
End Function 

Public Sub SetMyArrayValue(index, newValue) 
    m_MyArray(index) = newValue 
End Sub 

UserForm3 - 子窗体

Option Explicit 

Private m_parent As UserForm1 

Private Sub CheckBox1_Click() 
    If m_parent.GetMyArrayValue(4) = 1 Then 
     m_parent.SetMyArrayValue 0, 1 
     m_parent.SetMyArrayValue 4, 0 
    End If 
End Sub 

Public Property Set MyParent(ByVal vNewValue As UserForm) 
    Set m_parent = vNewValue 
End Property