Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: nimora am Mai 11, 2016, 17:19:04

Titel: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 11, 2016, 17:19:04
Hi, ich möchte aus einem Formular ein anderes Formular per button aufrufen. Wenn ich im VBA das Formular als Ziel angebe, öffnet sich, verständlicherweise das Formular aber als extra Reiter.

Bin da weder mit DoCmd.OpenForm noch mit DoCmd.BrowseTo zum Ziel gekommen.

Wie spreche ich also die einzelnen Elemente der Navigation an?

Ich nutze Access 2016

Thx
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: DF6GL am Mai 11, 2016, 18:18:27
Hallo,


versteh nicht..

Wenn sich Formulare als "Reiter" öffnen, liegt das an Einstellungen in den Access-Optionen.

Allenfalls kann ein Formular als Popup eingestellt werden, wodurch es sich außerhalb des Access-Fensters öffnet.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 11, 2016, 18:24:16
das war nicht gemeint :)

also:
Ich habe ein Navigationsformular, in dem verschiedene Formulare als Navigationselemente vorhanden sind. Z.B. "allg. Übersicht", "Kunden" und "Produkte".
in der Übersicht sind die letzten Verkäufe aufgeführt. Dort möchte ich von z.b. dem jüngsten Einkauf per Button direkt auf den Kunden springen. Hier öffnet sich leider das Formular "Kunden" separat und eben nicht das Navigationselement "Kunden". Letzteres ist aber gewünscht.

Konnte ich es jetzt klar machen?
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 11, 2016, 21:47:01
Hallo nimora,
Dein im Naviformular angezeigtes Form "Kunden" ist ein UFo desgleichen.
Wenn Du aber das Form "Kunden" per DoCmd.OpenForm öffnest wird es
als HFo neben dem Navi-Form geöffnet.
Um auf das (schon offene) Form zu zugreifen musst Du nur den Focus
darauf setzen und auf den gewünschten Datensatz positionieren.
hth
gruss ekkehard
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 12, 2016, 11:19:47
Danke Beaker,
das mit dem Datensatz klapp natürlich, aber wie lege ich denn den Focus auf das UFo? Wie spreche ich das an. Das ist ja als normales Formular angelegt, bekommt das dann intern einen anderen Namen als UFo?
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 12, 2016, 19:23:46
Hallo nimora,
Weiss ich ehrlich gesagt im Moment auch nicht, da ich das nicht verwende.
Habe hier jetzt auch keine DB, mit der ich das mal eben testen könnte.
Bin morgen wieder zu Hause, dann schau ich mal.
Du könntest bis dahin mal versuchen, ob es eine Forms-Auflistung des
Naviforms gibt.
DeinNaviFom.Forms("Kunden")
gruss ekkehard
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 12, 2016, 23:35:11
Hallo,
Zitat von: nimora am Mai 11, 2016, 17:19:04
Bin da weder mit DoCmd.OpenForm noch mit DoCmd.BrowseTo zum Ziel gekommen.
die BrowseTo-Methode dürfte in Verbindung mit einem Navigationsformular die richtige Wahl sein.

Zeige doch bitte deinen diesbezüglichen Versuch und erkläre bzw. beschreibe die dabei verwendeten Komponenten.

PS:
Der Phantasiecode von Ekkehard ist da eher nicht zielführend.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 13, 2016, 13:52:04
wenn DoCmd.BrowseTo  der Weg ist, schnalle ich den wohl nicht.

Die Doku gibt folgendes an:

DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
ObjectName:="EventDS", _
PathToSubformControl:="Main.NavigationSubform", _
WhereCondition:="", _
Page:="", _
DataMode:=acFormEdit


Ich scheitere aber an der Zuordnung. Ich bekomme einen Fehler 6045

Die WechselnZu-Maktoaktion erfordert ein gültiges Pfad-Argument. Ein gültiges Pfad-Argument hat folgende Form:
Hauptformular1.Unterformular1>Formular1.Unterformular1

Ist das Hauptformular1 dann jetzt die Bezeichnung des gesamten Navigationselements? und das Unterformular1 ist dann was? Ich schnelle die Struktur da nicht. In der Navigation ist der Button, wenn ich den auswähle habe ich in den Einstellungen einen Namen "NavigationButton13". Spielt das dabei eine Rolle? Ich finde nicht heraus, was Hauptfrom1, Unterform1 und Form1 ist.

Entsprechend kann ich deinen Wunsch, Maggie nicht erfüllen. Ich wüsste nicht, was ich schreiben soll.

Wärt ihr noch mal so nett und würdet mich ein wenig erhellen?
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 13, 2016, 15:05:59
Hallo Maggie,
ZitatDer Phantasiecode von Ekkehard ist da eher nicht zielführend.
Wie gesagt ich verwende dieses Naviform nicht, und habe mich deshalb
auch noch nicht mit zugehörigen Eigenschaften/Methoden beschäftigt.
War ein Schuss ins Blaue.
gruss ekkehard
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 13, 2016, 15:37:38
@nimora:
Du musst schon die bei dir gültigen Namen verwenden.
Wie heißen dein Navigationsformular und wie das Navigationsunterformular?
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 13, 2016, 16:49:06
Hallo nimora,

ObjectName (i.B. EventDS) ist das Formular, das Du sehen willst
(eingebettet in das UFo-Control).

Main ist der Name des NaviForms.

NavigationSubform ist das UFo-Control, in dem das o.a. Form ein-
gebettet ist.

gruss ekkehard

P.S. getestet
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 13, 2016, 16:55:49
@MaggieMay - Danke

genau darüber bin ich nicht ganz sicher.

das Nav heißt frmNavigation, darin enthalten sind dann verschiedene andere Formulare. Nun bin ich nicht sicher, ob die dann im vba auch ihre Originalnamen behalten oder nicht. eines heißt z.b. frmKunden und das soll in der Navigation per Button geöffnet werden.

Und insgesamt kann ich nicht zuordnen, wie das hier gemeint ist:
DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
ObjectName:="EventDS", _
PathToSubformControl:="Main.NavigationSubform", _
WhereCondition:="", _
Page:="", _
DataMode:=acFormEdit


und hier:
Hauptformular1.Unterformular1>Formular1.Unterformular1

Die Fehlermeldung und die Doku bringe ich da nicht zusammen.

Was ist der Path, was ist ObjectName und Main.NavigationSubform. und wie gesagt, wie passt dann die Fehlermeldung mit "Hauptform1", "Unerform1" usw. da rein.

thx
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 13, 2016, 16:58:13
@Beaker: thx
ZitatObjectName (i.B. EventDS) ist das Formular, das Du sehen willst
(eingebettet in das UFo-Control).

Main ist der Name des NaviForms.

das verstehe ich.

ZitatNavigationSubform ist das UFo-Control, in dem das o.a. Form ein-
gebettet ist.

verstehe ich leider nicht. ist damit der Name des Buttons gemeint?
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 13, 2016, 17:07:30
Hallo nimora,
Nein, das Control unter dem Button. (Buttonleiste oben)
Wenn du (in der Entwurfsansicht) auf den Button klickst, bekommt
der doch einen farbigen Rahmen. Wenn du nun in den Bereich darunter
klickst, (solltest) Du einen gleichfarbigen Rahmen um das dargestellte
Formular sehen; - DAS ist das UFo-Control, in den das Formular
eingebettet ist. Dessen Namen (F4) musst du in den Code schreiben.
gruss ekkehard
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 13, 2016, 17:27:07
ZitatWenn du nun in den Bereich darunter
klickst, (solltest) Du einen gleichfarbigen Rahmen um das dargestellte
Formular sehen; - DAS ist das UFo-Control, in den das Formular
eingebettet ist. Dessen Namen (F4) musst du in den Code schreiben.
gruss ekkehard

Das lautet "Navigationsunterformular" aber das ist bei allen UFo's gleich. Überall steht das.

EDIT:

so, wie folgt hat es geklappt:

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


Letzte Fragen fürs Verständnis: ist das normal, dass da überall Navigationsunterformular steht? Kann das zu Problemen führen und sollte das geändert werden?

Besten Dank für euer aller Mühe.

Jetzt kann ich ins lange WE gehen. Euch wünsche ich dasselbige.

VG
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 13, 2016, 19:15:18
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  ;)
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 13, 2016, 23:34:59
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.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 17, 2016, 13:36:45
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?
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 17, 2016, 13:45:02
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
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 17, 2016, 13:57:42
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.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 17, 2016, 14:00:30
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.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 17, 2016, 14:24:01
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.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 17, 2016, 14:36:05
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.
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: nimora am Mai 17, 2016, 17:08:42
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 (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
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: Beaker s.a. am Mai 17, 2016, 21:13:25
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
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 17, 2016, 22:23:31
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.
Titel: Re: vba Aufruf eines Formulars in der Navigation/Registersteuerelement
Beitrag von: nimora am Mai 19, 2016, 14:28:17
@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
Titel: Re: vba Aufruf eines Formulars in der Navigation
Beitrag von: MaggieMay am Mai 19, 2016, 14:52:51
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.