2017-06-01 3 views
1

Sorry im Voraus, wenn dies nicht klar ist, aber aus irgendeinem Grund hat mein Code vor kurzem funktioniert und ich habe keine Ahnung warum.VBA - Definieren eines Benutzerformulars, um später darauf zuzugreifen

Grundsätzlich habe ich ein Excel-VBA-Programm bei meiner Arbeit erstellt, um Berichte zu erstellen (z. B. einen Ofenbericht oder einen Baumbericht). Es gibt ein Deckblatt, bei dem der Benutzer verschiedene Details für den Bericht eingeben muss (z. B. Teilnehmer, Datum, Adresse usw.). Sobald dies erledigt ist, wählen sie einen Bericht aus (es gibt 5 verschiedene Benutzerformen, auf die sie vom Deckblatt aus zugreifen können). Wenn sie zum Beispiel Elektrisch wählen, können sie entweder einen Allgemein-, Herd- oder Heißwassersystem-Bericht auswählen (beachten Sie dies). Sagen Sie stattdessen, dass sie Klempner gewählt haben, sie können einen allgemeinen oder Warmwasserbericht wählen. Hier ist mein Problem ... Ich habe Schaltflächen zurück oder zurück auf allen Benutzerformularen (außer dem Deckblatt) und ich benutze das gleiche Benutzerformular für die Warmwasser-System und allgemeine Berichte für Elektro- und Sanitär (weil die Textfelder, Kontrollkästchen identisch sind). Mit all dem im Hinterkopf ..... (sorry ....) .....

Wie definiere ich, welche Benutzerform (Sanitär oder Elektrik) auch zurückgeben?

kann Postleitzahl bei Bedarf eingeben

+0

Ja, sollten Sie Ihren Code schreiben, damit wir Ihnen ein spezifisches Feedback und Richtung geben. – Graham

+0

Sie meinen zurück zum Deckblatt, um ein anderes Benutzerformular auszuwählen? Abhängig davon, wie Sie die Benutzerform gestalten, wird es einen anderen Ansatz geben. Also bitte Code und Screenshot von UserForm. – PatricK

Antwort

0

Sie könnten z. Parent Eigenschaft an das Kind Formular und so das Kind weiß über seine Eltern. HTH.

Einfaches Beispiel mit zwei Formen: UserForm1 ist Eltern, UserForm2 ist Kind.

' 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

Schätzen Sie die Hilfe, die ich beendete, indem Sie die folgende Lösung verwenden. Ich habe returnform als globale Objektvariable deklariert und setze sie jedes Mal, wenn ich auf die Schaltfläche klicke, um Benutzerformulare zu ändern. Wenn ich also auf den Zurück-Knopf klicke, kann ich angerufene returnform.show anrufen. – samtarrant

+0

Ja, die globale Variable könnte funktionieren. Sie speichern das vorherige Benutzerformular, so dass jedes Benutzerformular weiß, wohin es zurückkehren soll. Aber ich versuche persönlich, keine globalen Variablen zu verwenden, sondern bevorzuge die objektorientierte Lösung von Problemen. – dee

Verwandte Themen