2016-03-30 10 views
1

私は経験豊富なVBAプログラマーではありませんが、バスケットボールチームを管理できるExcelスプレッドシートを作成しようとしています。別のユーザーフォームで宣言された配列の参照

私は 'selectedPlayers'という配列を宣言したプライマリuserformを持っています。 このプライマリユーザーフォームには、2次ユーザーフォーム 'i'回を起動するforループがあります。

私はプライマリユーザーフォームの 'i'と 'selectedPlayers'にセカンダリユーザーフォームからアクセスできませんでした。 私は、最初のuserformで目に見えないテキストボックスを作成し、2番目のuserformから参照できるテキストボックスを作成することで回避策を見つけることができました。

私は両方をpublicとして宣言しようとしましたが、2番目のuserformから呼び出すことはできません。最初のユーザーフォームのコードの

部:

i = 0 
Do While Not i = Int(txtNumberPlayers) 
    frmGameDataSecondary.Show 
    i = i + 1 
Loop 

第二ユーザーフォーム:

Private Sub cmdDone_Click() 
    frmGameData.selectedPlayers(frmGameData.i) = lbxPlayer.Value 
    Unload Me 
End Sub 

Private Sub UserForm_Initialize() 
    With Me.lbxPlayer 

    For Each LR In LO.ListRows 
     exitSequence = False 

     For k = 1 To Int(frmGameData.txtNumberPlayers) 
      If frmGameData.selectedPlayers(k) = blablabla.Value Then 
       exitSequence = True 
      End If 
     Next k 

     If !exitSequence Then 
      .AddItem blablabla.Value 
     End If 

    Next LR 

    End With 
End Sub 

答えて

0

フォームからのすばらしい情報のトンを開始し、本当に良いスレッドがあるがオブジェクトであり、同様に扱うことができ他のクラスモジュール。つまり、プロパティを追加できます。フォームから情報を戻す必要がある場合は、の代わりにHideという参照を取得するだけです。それをダイアログのように扱い、呼び出しコードが作成と破壊を処理できるようにします(私はあなたのコードからモーダルであると仮定しています)。あなたは、外部からの配列を操作するparent formの内部プロパティを宣言することができ

Private mPlayer As String 

'This is where your returned information goes. 
Public Property Get Player() As String 
    Player = mPlayer 
End Property 

Private Sub cmdDone_Click() 
    mPlayer = lbxPlayer.Value 
    'Control passes back to the caller, but the object still exists. 
    Me.Hide 
End Sub 
0

:最初のユーザーフォームで

:第二のユーザーフォームで

For i = 0 To 1 
    Dim second As frmGameDataSecondary 
    Set second = New frmGameDataSecondary 
    second.Show 
    'Execution suspends until the second form is dismissed. 
    selectedPlayers(i) = second.Player 
    Unload second 
Next i 

このよう

何か。 child formparentへの参照を持つ必要があり、このプロパティを呼び出すことができます。 HTH

親フォーム

Option Explicit 

' I have not been able to access the primary userform's 
' 'i' and 'selectedPlayers' from the secondary one 
Private selectedPlayers As Variant 

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

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

Private Sub UserForm_Click() 
    Dim i 

    i = 0 
    Do While Not i = Int(txtNumberPlayers) 
     With New secondaryUserForm 
      Set .ParentForm = Me 
      .SetIndex = i 
      .Show 
     End With 
     i = i + 1 
    Loop 
End Sub 

Private Sub UserForm_Initialize() 
    selectedPlayers = Array("A", "B", "C") 
End Sub 

子フォーム

Option Explicit 

Private m_parent As primaryUserForm 
Private m_index As Integer 

Public Property Let SetIndex(ByVal vNewValue As Integer) 
    m_index = vNewValue 
End Property 

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

Private Sub cmdDone_Click() 
    ' frmGameData.selectedPlayers(frmGameData.i) = lbxPlayer.Value 
    m_parent.SetMyArrayValue m_index, "lbxPlayer.Value" 
    Unload Me 
End Sub 
関連する問題