August 15, 2020, 06:16:50

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Per VBA ein Formular in einem Navi-Formular aufrufen

Begonnen von Gösser, Juni 23, 2020, 18:26:39

⏪ vorheriges - nächstes ⏩

Gösser

Hallo zusammen,

ich hoffe, ich bin hier richtig.

Ich habe ein Ticketsystem gebaut. Um alles übersichtlich zu halten, habe ich ein Navigationsformular eingebaut. Hinter jedem Registerblatt schlummert ein Formular. Eines davon ist "Ticket anlegen". Da gibt es ein Button, der die Kundensuche aufruft in Form eines Pop-Up-Fensters. Neben jeden Datensatz ist ein Button "Übernehmen". Dem Button habe ich etwas VBA-Code verpasst, damit der Endnutzer einfacher arbeiten kann. Wenn man auf dem Button klickt, so wird zuerst der Fokus auf die Kd-Nummer gelegt und dann kopiert. Anschließend wird das Fenster geschlossen. Dann ruft der Code das Formular "frmTicketAnlegen" auf, legt den Fokus auf die Kd-Nummer, kopiert diese dann ein und legt zum Schluss ein Requery ein.

Soweit, so gut, jedoch möchte ich, dass das Formular im Hauptmenü genutzt wird und nicht das Formular separat benutzt wird. Die letzten Tage habe ich verschiedene Lösungsmöglichkeiten versucht, jedoch erfolglos ( bpsw DoCmd OpenForm "frmHauptmenü!frmTicketanlage //frmHauptmenü!Navigationsunterformular!Ticketanlage....) Ich bin momentan etwas ratlos.

Mag mir wer helfen? Ich lege Bildmaterial anbei. (Menü und das PopUp, den Code und das Resultat)

Vielen Dank und schönen Abend zusammen.

Beaker s.a.

Hallo Gösser,
Zitatdass das Formular im Hauptmenü genutzt wird
Heisst, es liegt auf einer Registerkarte des Navi-Forms, - richtig.
Um mit VBA die Register (die eingebunden Forms) auf dem Navi-Form
zuzugreifen benötigst du die .BrowseTo Methode des DoCmd-Objektes
DoCmd.BrowseTo ...Parameter siehe OH.

Die Übergabe der Kunden-ID per C&P ist das denkbar schlechteste
Verfahren. Das sollte man besser machen. Entweder "klassisch" mit
Property Let/Get Prozeduren und einer Membervariablen im Navi-
Form, oder "modern" mit einer seit A2007/10? eingeführten TempVar.
Letzteres kurz beschrieben, - vor dem o.a. BrowseTo schreibst du
eine Zeile
TempVars("vKundenID") = Me.KDNr"Beim Laden" des "frmTicketAnlegen" holst du dir die Kunden-Nr. von
dort
Me.KundenNr = TempVars("vKundenID")Die Fokussierung auf das Textfeld kannst du auch ohne Code über die
Aktivierungsreihenfolge erreichen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Gösser

Hallo Ekkehard,

vielen Dank für das Nehmen deiner Zeit und das beantworten meiner Frage. Es gibt unglaublich viel zu lernen, danke dir für deinen Input.

Heute Abend werde ich es austesten und ein kleines Feedback schreiben.

Vielen Dank an alle, die den Beitrag gelesen haben.

Gösser

Hallo Zusammen,

ich bedanke mich erneut für den guten Stubser. Ich habe die Kundennummer in eine temporäre Variable eingepackt. Dann läuft der Code per DoCmd.BrowseTo zum Unterformular vom Navi-Formular. Dabei halfen mir diverse Youtube-Tutorials.

Dort im Unterformular angelangt, soll der Code die Variable im Feld Kundennummer einspeisen, jedoch teilt mir Access freundlich mit, dass die Methode oder Datenbankobjekt nicht gefunden werden konnte.

Ich habe die Schreibweisen mehrfach abgeglichen, demnach ist der Fehler vermutlich woanders zu verorten.

Mag mir wer einen Tipp geben, wo ich zu schauen habe?

Vielen Dank und schönen Abend zusammen.

Bearbeitungsgrund: Rechtschreibfehler gefunden

Beaker s.a.

Hallo Gösser,
Die Zeile steht im falschen Modul/Formular. Die gezeigte Prozedur sollte nach
DataMode:=acFormEditzu Ende sein.
Das Zuweisen der Nummer erledigst du "Beim Laden" des Forms "frmTicketAnlegen"
Private Sub Form_Load()
    Me.KundenNr = TempVars("KDNummer").Value
End Sub
Wegen des ".Value" beim Anlegen der TempVar; - TempVars können wohl auch Objekte
beinhalten, und deshalb wird hier wohl die Standardeigenschaft benötigt um nicht
das Control-Objekt zu übergeben.
Habe TempVars aber, ehrlich gesagt, auch noch nie verwendet; - kann mich nicht von
Property-Prozeduren lösen.

gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.

Gösser

Lieber Ekkehard,

danke, diesen Klaps auf auf den Hinterkopf hatte ich gebraucht. Ganz lieben Dank für deine Zeit.

Ich fasse kurz zusammen, falls wer eine ähnliche Herausforderung/Verständnisproblem haben sollte wie ich und es in "andere Worte" braucht.

In einem Navigationsformular gibt es das Unterformular "Ticket Anlegen". Das Unterformular hat ein Button, welches ein anderes Pop-Up-Formular "Kundensuche" aufruft. Per Knopfdruck soll die Kundennummer aus der Kundensuche in das Formular "Ticket Anlegen" übernommen werden. Per Requery soll aus der KD-Nummer dann die Firma angezeigt werden.

So habe ich es nun (dank euch) lösen können:

Dem Button "Übernehmen" gab ich die Anweisung, die Kundennummer in eine temporäre Variable zu schreiben. Dann wurde das Formular automatisch geschlossen und Access brauste zum Formular "Ticket Anlegen" über das Hauptmenü/Hauptformular. In dem Formular "Ticket Anlegen" lasse ich zuerst einmal "aufräumen", in dem ich zu einem new Record, also neuen Datensatz hüpfe. Im Feld KD-Nr wird die Variable übergeben. Anschließend hole ich mir die Firmierung über ein Requery ab und kann loslegen.

Case closed.

Der Code vom Pop-Up-Fenster-Button "Übernehmen",

Private Sub Befehl40_Click()

TempVars("KDNummer") = Me.KDNr.Value ' Temporäre Variable befüllen

DoCmd.Close acForm, "frmqryKdSuche" 'Pop-Up-Fenster schließen

'FrmTicketAnlegen über das Hauptmenü öffnen
DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
ObjectName:="frmTicketAnlegen", _   <--- Das Formular eingeben, dass geöffnet werden soll!
PathToSubformControl:="frmHauptmenü.Navigationsunterformular", _  <-Navigationsunterformular ist der Standardname
whereCondition:="", _
Page:="", _
DataMode:=acFormEdit

End Sub

Nachdem der Code ausgeführt wurde, wird das Formular frmTicket geladen.

Private Sub Form_Load()
DoCmd.RunCommand acCmdRecordsGoToNew  <-Neues Ticket öffnen

Me.KundenNr = TempVars("KDNummer").Value <-Übergabe der Variable
Me.txtFirma.Requery <-Firma "aktualisieren"

End Sub

Lieber zukünftiger Forenbesucher mit dieser Problematik: Ich hoffe, meine Fehler und Unwissenheit kann dir helfen.

@Beaker s.a. Dankeschön :)

Gruß

Gösser