2016-02-22 21 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