Neuigkeiten:

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

Mobiles Hauptmenü

vba Aufruf eines Formulars in der Navigation

Begonnen von nimora, Mai 11, 2016, 17:19:04

⏪ vorheriges - nächstes ⏩

Beaker s.a.

Hallo nimora,
Zitatist das normal, dass da überall Navigationsunterformular steht? Kann das zu Problemen führen und sollte das geändert werden?
Ja, wie es aussieht gibt es nur ein "UFo"-Control, in dem die verschiedenen
Forms angezeigt wird.
Welches Form das ist wird in der Eigenschaft "Name des Navigationsziels"
des zugehörigen Reiterbuttons gesteuert. Im Code ist das der Parameter
"ObjectName".

gruss ekkehard


P.S. Wenn das so weiter geht, werde ich noch Spezialist für dieses
bescheuerte NaviForm  ;)
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)

MaggieMay

Hi,
Zitat von: nimora am Mai 13, 2016, 17:27:07
ist das normal, dass da überall Navigationsunterformular steht?
Ja, natürlich, denn es gibt ja nur ein Unterformular-Steuerelement, in das die diversen Formulare beim Wechsel der Navigations-Buttons geladen werden.

Und genau das ist ja auch der Haken bei diesem Navigationsformular, dass die Unterformulare beim Wechsel der Register jeweils geschlossen und neu geöffnet werden. Ein herkömmliches Register-Steuerelement (als Alternative zum Navigations-Formular) kann man ebenso, aber auch je nach Bedarf differenzierter einsetzen und nutzen.
Freundliche Grüße
MaggieMay

nimora

Besten Dank.

Die Umsetzung in einem Register ginge auch, scheint mir auch schneller zu laufen, dennoch wäre auch hier wieder die Frage, wie man da per Button in einem Register auf einen bestimmten! Datensatz in einem anderen Register kommt.

also im code: Me!Register.Value = 1

wie oder wo kommt das da rein? Unter welchem Stichwort finde ich in der Doku da was?

MaggieMay

#18
Ich weiß jetzt nicht was du mit dem Code im Sinn hast, aber ich kann dir sagen, wie du auf einen bestimmten Datensatz springen kannst,
bspw. so:
Me.Recordset.FindFirst "feldname=" & feldwert

Oder, von einem Ufo ins andere:
Me.Parent.uf2.Form.Recordset.Findfirst "feldname=" & feldwert
Freundliche Grüße
MaggieMay

nimora

Danke.
hmm, ich meine:

Register A mit Button 1 soll gedrückt werden und damit in Register B einen im VBA des Button 1 definierten Datensatz aufrufen.

Darum ging es in dem ganzen Beitrag, nur hattest du ja nun den Tip gegeben, dass dies auch in einem Register umsetzbar wäre.

MaggieMay

Hast du denn Fragen zu meinem Vorschlag, ist noch irgend etwas unklar?

Oder was genau meinst du hiermit:
ZitatRegister A mit Button 1 soll gedrückt werden und damit in Register B einen im VBA des Button 1 definierten Datensatz aufrufen.
Freundliche Grüße
MaggieMay

nimora

Ich habe deinen Vorschlag nicht als Antwort auf die letzte Frage verstanden, sondern als Antwort auf die ursprüngliche Frage in diesem Beitrag. Außerdem hattest du ja geschrieben, dass dir nicht klar ist, was ich mit dem Code im Sinn habe. Deinen Code bekomme ich da sowohl praktisch als auch gedanklich nicht eingearbeitet. Vielleicht reden wir aber auch aneinander vorbei.

MaggieMay

Also wir sind jetzt beide bei der Variante mit dem Register-Steuerelement - ok?

Dann kannst du auf Knopfdruck von A nach B springen und dort einen bestimmten Datensatz anspringen,
bspw. so:
Private Sub cmd_1_Click()
    Me.RegCtl = 1
    Me.Parent.uf2.Form.Recordset FindFirst "ID=" & Me.ID
End Sub


Das ist natürlich Phantasiecode, weil ich nicht weiß wie dein Registersteuerelement und deine Unterformulare heißen, und ob auf Register A überhaupt ein Unterformular liegt und auf welchen Datensatz du springen willst, d.h. welches Datenfeld im Kriterium anzusprechen ist und woher der Wert dazu kommt.

Vielleicht kannst du ja etwas damit anfangen.
Freundliche Grüße
MaggieMay

nimora

#23
habe es leider nicht geschafft, es zurechtzubasteln.

Ich habe folgende Formulare:
frmVerkaeufe
frmKunden
frmRegister.

In Register1 in frmRegister liegt das Formular frmVerkaeufe (frmVerkäufe basiert auf einer Abfrage). Somit ist ja frmVerkaeufe das Ufo?!? In den Eigenschaften steht für das Ufo frmVerkaeufe im Register1 als Name "Verkaeufe_Kunden".

Der Button innerhalb dieses Forms/Ufo´s soll nun auf Register2 verweisen, in dem sich das Form/Ufo frmKunden befindet. In den Eigenschaften ist dieses "Kunden" genannt. Und hier soll der entsprechende Kunde ausgewählt werden.

Ich kann leider aus deinem Code das uf2 und das Form nicht zuordnen, was was ist. Es gibt ja zwei Ufo's, "Verkaeufe_Kunden" und "Kunden". und Me.RegCtl = 1 sagt mir leider auch nichts. Ist das das Registerelement? Bei mir hieße das ja me.RegisterStr0 = 1. Das funktioniert war direkt aus dem Register1 aber nicht aus dem Ufo.

:'(

EDIT:

habe nun hier https://dbwiki.net/wiki/Access_Bedienungsanleitung:_Bezug_auf_Formular/Unterformular ein wenig was gefunden, sodasss ich zumindest aus dem entsprechenden Ufo in das andere Register komme.

Me.Parent.Parent!RegisterStr0.Value = 1 funzt also.

bei

Me.Parent.Kunden.Form.Recordset FindFirst "ID=" & Me.ID

gibts schon beim kompilieren einen syntaxfehler und er spring auf den code "ID="

die ID ist vorhanden, ich kann sie mir per debug.print ausgeben lassen.

und bei:

Me.Parent.Kunden.RegisterStr0.Recordset.FindFirst "ID=" & Me.ID

kommt: Objekt unterstützt diese Eigenschaft oder Methode nicht.

wo mache ich noch einen fehler?

DAnke

Beaker s.a.

Hallo nimora,
Das Register-Control ist kein Teil des "Pfades" zum UFo; - dessen Name
wird hier nicht benötigt.
Wenn der Button in einem UFo liegt, dann ist:
Me = das Formular im UFo-Control (farbiger Rahmen um das Form)
.Parent = das HFo, in deinem Fall "frmRegister"
Me.Parent.Kunden.Form.Recordset FindFirst "ID=" & Me.ID
Ist aber im Prinzip schon richtig, unter der Voraussetzung, dass
"Kunden" der Name des UFo-Controls auf der zweiten (anzusteuernden)
Registerkarte ist.
"ID" muss natürlich auch deinen Feldnamen (Tabelle/Form) entsprechen.

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)

MaggieMay

Hi,

Zitat
Me.Parent.Parent!RegisterStr0.Value = 1
funzt also.

das lässt darauf schließen, dass es sich um ein Unterformular im Unterformular handelt. Du solltest also dein Beschreibung dahingehend noch einmal überarbeiten.
Freundliche Grüße
MaggieMay

nimora

@Beaker

ZitatIst aber im Prinzip schon richtig, unter der Voraussetzung, dass
"Kunden" der Name des UFo-Controls auf der zweiten (anzusteuernden)
Registerkarte ist.
"ID" muss natürlich auch deinen Feldnamen (Tabelle/Form) entsprechen.

das ist alles erfüllt, dennoch gibt es sofort einen Syntaxfehler und die Markierung legt sich auf '"ID="'. Ich kann mir ID auch per debug.print ausgeben.daher war/bin ich da ratlos.

EDIT: es fehlt ein Punkt zw. Recordset und FindFist - natürlich  ::)

Damit funzt es.

@Maggie:

hier hapert es wohl wieder am Verständnis für die einzelnen Bestandteile und wir hatten die Diskussion ja schon mal, dass wenn man die Bezeichnung nicht exakt kennt, auch die Suche oder Beschreibung abweichen kann.

Dass es ein Ufo im Ufo ist konnte ich nur raten, da alle anderen Varianten nicht funktioniert haben. Mir ist aber nicht bekannt, dass oder ob ein Registersteuerelement in einem Formular schon ein Ufo ist und demnach das sich auf einem Register befindliche Formular ein Ufo im Ufo ist. Ich habe es oben beschrieben wie es ist, nur scheinbar im falschen Fachjargon. Bitte entschuldige.

Für die Nachwelt:

Aufruf über Navigation (eine Möglichkeit):


DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
ObjectName:="frmKunden", _
PathToSubformControl:="frmNavigation.Navigationsunterformular", _
DataMode:=acFormEdit


Aufruf über Registersteuerlement:

Me.Parent!RegisterStr0.Value = 1
Me.Parent.Kunden.Form.Recordset.FindFirst "ID=" & Me.ID


Besten Dank für alle Hilfen

MaggieMay

ZitatDass es ein Ufo im Ufo ist konnte ich nur raten
Sorry, aber das muss man doch sehen, wenn man sich den Formularentwurf anschaut.  ???

Ein Registersteuerelement an sich ist kein Unterformular, sonder ein ganz "normales" Steuerelement. Bei einem Register im Register ist immer ein Unterformular im Spiel, weil sich das anders nicht einfügen lässt.
Freundliche Grüße
MaggieMay