Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

OpenArgs-Problem

Begonnen von VIE81, Juni 15, 2020, 11:53:29

⏪ vorheriges - nächstes ⏩

VIE81

Hallo!

Ich habe ein Problem mit OpenArgs, bei dem ich hoffe, dass mir jemand von Euch helfen kann.

Ausgangslage:


  • in einem Hauptformular (Datenquelle "tblEreignisse") habe ich ein Unterformular (Datenquelle "tblPersonenEreignisse") eingebunden, das anhand der ID aus dem Hauptformular über eine Abfrage die Personen zu referenziert, die mit der ID aus dem Hauptformular verknüpft sind anzeigt. Das funktioniert soweit auch feherlfrei.
  • im Unterformular habe ich 3 ungebundene Felder, die ich für eine Weiterverarbeitung (E-Mail senden mit DoCmd.Sendobjects) brauche. Die Daten sollen in ein ungebundenes Formular übergeben werden.
  • in einem ungebundenen Formular (frmMailvorbereitung) verarbeite ich die Zusammenstellung von Daten aus dem Hauptformular für den E-Mail-Versand, das funktioniert soweit auch fehlerfrei.
  • im Formular frmMailvorbereitung habe ich die 3 ungebundenen Textfelder ("mName", "mAdresse" und "mVerwendung"), in die mit OpenArgs jene Daten aus dem Unterformular übernommen werden sollen.

Soweit so gut; der Code für den Button aus dem Unterformular lautet wie folgt:


Private Sub taskAufforderung_Click()

Dim strPar As Variant
strPar = "mAdresse=" & Me.P_EMAIL_ADRESSE & "|" & "mName=" & Me.P_NAME_KOMB & "|" & "mVerwendung=" & Me.P_DIENSTEIGENSCHAFT

DoCmd.OpenForm "frmMailvorbereitung", , , , , , strPar
End Sub


Im Formular "frmMailvorbereitung" habe ich folgenden Code:


Private Sub Form_Open(Cancel As Integer)
Dim strPar As Variant
strPar = Split(Me.OpenArgs, "|")
End Sub


Wenn ich mir die zu übergebenen Daten in einer MsgBox anzeigen lasse, dann sehe ich, dass die Daten auch "ankommen", die Felder bleiben aber seltsamerweise leer.

Kann mir jemand von Euch vielleicht einen Tipp geben, was ich falsch mache bzw. ob ich dabei etwas vergessen habe?

Danke für Eure Hilfe.

Viele Grüße,
VIE81

PhilS

Zitat von: VIE81 am Juni 15, 2020, 11:53:29
Wenn ich mir die zu übergebenen Daten in einer MsgBox anzeigen lasse, dann sehe ich, dass die Daten auch "ankommen", die Felder bleiben aber seltsamerweise leer.
Du bzw. dein Code muss sich darum kümmern, dass die Steuerelemente gefüllt werden.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

VIE81

Zitat von: PhilS am Juni 15, 2020, 12:05:41
Zitat von: VIE81 am Juni 15, 2020, 11:53:29
Wenn ich mir die zu übergebenen Daten in einer MsgBox anzeigen lasse, dann sehe ich, dass die Daten auch "ankommen", die Felder bleiben aber seltsamerweise leer.
Du bzw. dein Code muss sich darum kümmern, dass die Steuerelemente gefüllt werden.
Hmmm - und da hänge ich offenbar  :-\

Kannst Du mir hier bitte auf die Sprünge helfen?
DANKE  :)

PhilS

Nur mal den groben Ansatz skizziert:
Private Sub Form_Open(Cancel As Integer)
  Dim strPar As Variant
  strPar = Split(Me.OpenArgs, "|")
  Me.txtAdresse.Value = strPar(0)
End Sub

Natürlich hast du dann auch das "mAdresse=" mit in dem Steuerelement.
Es gibt verschiedene Ansätze, wie man das tatsächlich umsetzt. Du könntest den Steuerelementnamen in den String schreiben, dann nochmal bei Gleichheitszeichen splitten und anhand des ersten Teils das Steuerelement erkennen und ihm den zweiten Teil als Wert zuweisen.

Ungesteter Luftcode:

Private Sub Form_Open(Cancel As Integer)
  Dim strPar As Variant
  dim i as long
  strPar = Split(Me.OpenArgs, "|")
 
  for i = lbound(strpar) to Ubound(strPar)
    Me.Controls(Split(strPar,"=")(0)).value = Split(strPar,"=")(1)
  next i
   
End Sub


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

VIE81

Zitat von: PhilS am Juni 15, 2020, 12:41:01
Nur mal den groben Ansatz skizziert:
Private Sub Form_Open(Cancel As Integer)
  Dim strPar As Variant
  strPar = Split(Me.OpenArgs, "|")
  Me.txtAdresse.Value = strPar(0)
End Sub


DANKE PhilS!

Das wars - ich habe nun aber noch im Code, wo ich strPar definiere die Feldbezeichnungen weggenommen, da die Namen der Felder sinngemäß natürlich nicht im Textfeld stehen sollen.

Funktioniert super  ;)

Danke nochmals und viele Grüße,
VIE81

ebs17

Im Form_Open würde man vorteilhaft immer OpenArgs zuerst auf IsNull prüfen. Das versetzt einen auch problemfrei in die Lage, das Formular zusätzlich in anderer Weise, z.B. als Nur-Eingabeformular, zu nutzen.
Mit freundlichem Glück Auf!

Eberhard