Neuigkeiten:

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

Mobiles Hauptmenü

Wechseln des Registers inkl Variablenübergabe

Begonnen von xoius, Mai 07, 2020, 13:14:09

⏪ vorheriges - nächstes ⏩

xoius

Moin ihr Lieben,
ich brauche nochmal euere Hilfe.

Ausgangslage
Ich habe im Hauptformular formProdukte ein Register mit je einem Registertab für die Formulare ufoAlleKosten (Endlosformular, Register 1) und formKosten(Einzelformular, Register 2)

Im Endlosformular wird für jeden Datensatz ein Button "Details" angezeigt, der beim Drücken auf den entsprechenden Datensatz im anderen Registertab springen soll.

Problemstellung
Mit Forms!formProdukte!RegisterStr105.Pages(2).SetFocus kann ich das richtige Register öffnen, kann aber offenbar keine Variable übergeben.

Mit DoCmd.OpenForm "formKosten", , , "KostenID=" & Me!KostenID
öffnet sich zwar das Formular mit der richtigen ID, aber eben nicht im Register

Wie schaffe ich es beide Tugenden zu verbinden :) Tipps?

PhilS

Zitat von: xoius am Mai 07, 2020, 13:14:09
Problemstellung
Mit Forms!formProdukte!RegisterStr105.Pages(2).SetFocus kann ich das richtige Register öffnen, kann aber offenbar keine Variable übergeben.
Welche Variable möchtest du wohin übergeben?
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

xoius

Ich möchte die Variable "KostenID" des Datensatzes aus dem Endlosformular "ufoAlleKosten" bei dem der Button geklickt wurde, an das Formular "formKosten" übergeben. Beide Formulare arbeiten mit der gleichen Tabelle tblKosten, die die Variable KostenID enthält.

Beaker s.a.

@xoius
(Luftcode)
Private Sub DeinButton_Click()
    Me.Parent.UFo2Control.Form.Recordset.FindFirst = _
          "KostenID = " & Me.FeldMitKostenID
    Me.Parent.RegisterStr105.Value = 2
End Sub

(Namen anpassen)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

xoius

Vielen Dank Beaker,

leider funktioniert es noch nicht. Ich habe es so umgesetzt und bekomme eine Fehlermeldung "Methode oder Datenbankobjekt nicht gefunden"


Private Sub Befehl176_Click()
Me.formProdukte.formKosten.Form.Recordset.FindFirst = _
    "KostenID = " & Me.KostenID
Me.formProdukte.RegisterStr105.Value = 2
End Sub


Nochmal zum Aufbau:

Ich habe das formProdukte.
Darin enthalten ist das Register RegisterStr105.
Auf Registerkarte 1 ist das Formular ufoAlleKosten eingebettet, indem die Variable KostenID aus der Tabelle tblKosten unsichtbar im Feld KostenID enthalten ist.
Auf Registerseite 2 ist das Formular formKosten eingebettet, was ebenfalls über eine Abfrage mit der tblKosten verbunden ist.

Zusatzfrage:
Wenn ich von einem ganz anderen Formular formODOverview mit dem Unterformular ufoAufgaben über einen Button ebenfalls direkt zu formProdukte/Register105/formKosten möchte, funktioniert das "Me" vermutlich nicht? Wie gehe ich da vor?


PhilS

Zitat von: xoius am Mai 08, 2020, 09:09:36
leider funktioniert es noch nicht. Ich habe es so umgesetzt und bekomme eine Fehlermeldung "Methode oder Datenbankobjekt nicht gefunden"
[...]
Zusatzfrage:
Wenn ich von einem ganz anderen Formular formODOverview mit dem Unterformular ufoAufgaben über einen Button ebenfalls direkt zu formProdukte/Register105/formKosten möchte, funktioniert das "Me" vermutlich nicht? Wie gehe ich da vor?
Parent ist eine Eigenschaft des Formulars, die ein evtl. vorhandenes Hauptformular zurückliefert. - Diese sollte in Beaker's Beispiel unverändert bleiben.

Ich würde im Hauptformular eine öffentliche Prozedur erstellen, die KostenId und Registerseite als Argumente erhält und dann die Positionierung auf den Datensazt erledigt (analog zum Beispiel). Die kannst du dann sowohl aus den Unterformularen als auch von sonstwo aufrufen.


Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Beaker s.a.

Hallo,
ZitatIch würde im Hauptformular eine öffentliche Prozedur erstellen, die KostenId und Registerseite als Argumente erhält und dann die Positionierung auf den Datensazt erledigt (analog zum Beispiel). Die kannst du dann sowohl aus den Unterformularen als auch von sonstwo aufrufen.
War auch meine erste, eigentlich auch richtigere, Idee  :-[
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

xoius

Wirft leider immernoch den Fehler aus...Er sagt Anwendungs- oder Objektfehler...

Könnt ihr euren Alternativvorschlag bitte nochmal klarer machen? Ich lege eine öffentliche Prozedur an?
Also zum Beispiel:

Public Function fktKosten()
Me.Parent.formKosten.Form.Recordset.FindFirst = _
    "KostenID = " & Me.KostenID
Me.Parent.RegisterStr105.Value = 2
End Function


Oder wie übergebe ich da die Parameter?

DF6GL

Hallo,

heißt der Name des UFO-Steuerelementes, das das Formular "formKosten" anzeigt, auch wirklich "formKosten"?


Beaker s.a.

@xoius
ZitatIch lege eine öffentliche Prozedur an?
Wo? Im Formular (HFo oder UFo) oder in einem allgem. Modul?
Wenn im Formular, lese: http://www.donkarl.com?FAQ4.2
In einem allgem. Modul musst du der Function eine Referenz auf das HFo
übergeben. Am besten auch gleich die ID.

'Aufruf im HFo
fktKosten(Me, Me.UFo1ControlName.Form.KostenID)
'Aufruf im UFo1
fktKosten(Me.Parent, Me.KostenID)

Public Function fktKosten(frm As Access.Form, lKostenID As Long)
    With frm
        .UFo2ControlName.Form.Recordset.FindFirst "KostenID = " & lKostenID
        .RegisterStr105.Value = 2
    End With
End Function

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

xoius

Vielen Dank für eure lieben Tipps, aber ich stochere eher im Dunkeln und stelle mich dabei offennbar zu blöd an.

Folgendes habe ich umgesetzt:

HF beim Klicken
=fktKosten([Me];[Me].[formAufgaben].[Form].[KostenID])

Ufo beim Klicken
=fktKosten([Me].[Parent];[Me].[KostenID])

Public Function fktKosten(frm As Access.Form, lKostenID As Long)
    With frm
        .formKosten.Form.Recordset.FindFirst "KostenID = " & lKostenID
        .RegisterStr105.Value = 2
    End With
End Function


Die Procedure liegt im allgm. Modul.

Es kommt folgender Fehler: "...Objekt enthält das Automatisierungsobjekt Me nicht."

Vielleicht nochmal grafischer/klarer was ich vorhabe:
a.
Startpunkt
HF "formODOverview" mit "RegisterStr5" auf Seite 0 ist das UF "formAufgaben" (Endlosformular) (war mal eigenständig, deswegen heißt es nicht ufoAufgaben). Über den Button "Befehl176" soll es zum Ziel gehen.

Ziel
HF "formProdukte" mit "RegisterStr105" auf Seite 2 ist UF "formKosten" (war mal eigenständig, deswegen heißt es nicht ufoKosten)

b.
Startpunkt
HF "formProdukte" mit "RegisterStr105" auf Seite 1. Da ist das UF "ufoAlleKosten" (Endlosformular) mit Button "Befehl176" (heißt zufällig genauso)
Ziel
HF "formProdukte" mit "RegisterStr105" auf Seite 2 ist UF "formKosten" (war mal eigenständig, deswegen heißt es nicht ufo)


DF6GL

Hallo,

lad mal die DB hier hoch, datenreduziert, komprimiert/repariert und gezippt.

Dann können wir die Sache mal konkreter ansehen.

Beaker s.a.

ZitatEs kommt folgender Fehler: "...Objekt enthält das Automatisierungsobjekt Me nicht."
Das liegt an den eckigen Klammern, - schmeiss die raus!
Die braucht man nur wenn in Objektnamen Sonderzeichen enthalten sind,
was man eh vermeiden sollte.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

liegt eher daran:

ZitatDie Procedure liegt im allgm. Modul.


und dort ist die Referenz auf das aktuelle Formular (es gibt an dieser Stelle ja keines) unbekannt.