2017-06-01 21 views
1

これは明確ではないが、なんらかの理由で私のコードが最近動作しなくなったため、私は理由が分かりません。VBA - 後で呼び出すためのユーザーフォームの定義

私の仕事では、レポート(つまり、ストーブレポートまたはツリーレポート)を実行するためにExcel vbaプログラムを作成しました。ユーザーがレポートの詳細(出席者、日付、住所など)を入力する必要がある表紙フォームがあります。これが完了すると、完了するレポートを選択します(カバーページからは5つの異なるユーザーフォームが表示されます)。たとえば、Electricalを選択した場合は、General、StoveまたはHot Water Systemレポートを選択できます(これを念頭に置いてください)。代わりに彼らは配管を選択したと言って、彼らは一般または給湯システムレポートを選択することができます。 Heres私の問題は...私はすべてのuserforms(カバーページを除く)のボタンを返すか戻っていると私は同じuserformを熱水システムと電気と配管の両方の一般的なレポートを使用する(テキストボックス、チェックボックスが同じであるため)。このことを念頭に置いて.....(ごめんなさい....).....

返すべきuserform(配管または電気)の定義方法を教えてください。

必要に応じてコードを投稿することができます。

+0

私たちはあなたに特定のフィードバックや方向性を与えることができるようにはい、あなたはあなたのコードを投稿する必要があります。 – Graham

+0

別のユーザーフォームを選択するには、カバーページに戻ることを意味しますか? Userformをどのように設計するかによって、異なるアプローチがあります。だから、UserFormのコードとスクリーンショットを投稿してください。 – PatricK

答えて

0

Parentの子フォームへのプロパティであるため、子はその親について知っています。 HTH。 2つのフォームで

簡単な例:UserForm1UserForm2で、です。

' This is parent Form 

Private child As UserForm2 

Private Sub UserForm_Initialize() 
    Set child = New UserForm2 
    Set child.Parent = Me ' here the parent is set so the child knows it 
End Sub 

Private Sub CommandButton1_Click() 
    Me.Hide 
    child.Show 
End Sub 

' This is Child Form which knows about it's parent 

Private m_parent As Object 

Public Property Get Parent() As Object 
    Set Parent = m_parent 
End Property 

Public Property Set Parent(ByVal vNewValue As Object) 
    Set m_parent = vNewValue 
End Property 

Private Sub CommandButton1_Click() 
    ' Go back to parent 
    Me.Hide 
    m_parent.Show 
End Sub 
+0

次のソリューションを使用して終了したヘルプを評価してください。私はグローバルオブジェクト変数としてreturnformを宣言し、ボタンを押してユーザーフォームを変更するたびに設定しました。だから、私が戻るボタンを押すと、私はreturnform.showを呼び出すことができました。 – samtarrant

+0

はい、グローバル変数が機能する可能性があります。以前のuserformを保存して、各ユーザーフォームがどこに戻るかを知るようにします。しかし私は個人的にグローバル変数を使用しないようにしますが、オブジェクト指向の方法で問題を解決します。 – dee

関連する問題