Neuigkeiten:

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

Mobiles Hauptmenü

Aufruf Form mit Register und gleichzeitiges Ausblenden einer (Register)Seite

Begonnen von SteBa, Juni 14, 2011, 15:35:50

⏪ vorheriges - nächstes ⏩

SteBa

Hallo zusammen,

ich bin langsam am Verzweifeln und wende mich nun hoffnungsvoll an Euch (ich habe vorab intensiv nach der Lösung *gesuchmaschint* und komme trotzdem nicht weiter).

Ich rufe bei Klick auf einen Button aus einem Formular A das Formular B auf. In diesem Formular B gibt es ein Registerkartenelement mit 3 Seiten. Im gleichen Zug, wie das Aufrufen möchte ich auch die Eigenschaft "Visible" der Seite 3 auf "False" setzen.

Zum Verständnis: das aufgerufene Formular B dient sowohl zur Datenneueingabe wie auch zur Bearbeitung vorhandener Daten. Bei Klick auf o.g. Button handelt es sich um eine Neueingabe, bei der die Seite 3 des Registers sinnlos ist und somit ausgeblendet werden soll.

Ich bekomme nun, egal wie ich den Code aufbaue, für das angesprochene Element ("pgeSeite3") den Fehler:

>> "Datenbankname" kann das in Ihrem Ausdruck angesprochene Feld 'pgeSeite3' nicht finden. <<

Der Aufruf des Formulars mit dem Registerelement funktioniert noch, ebenso das leeren sämtlicher Eingabefelder (für neuen Datensatz) und der Fehler kommt dann bei folgendem Code:

Me!pgeSeite3.Visible = False

pgeSeite3 ist der Name des 3. Reiters (Seite) des Registerelementes.

Ich danke Euch vorab ganz herzlich für jeglichen Hinweis,

Gruß
Stefan

edgar.basler

Versuche es mal mit einem Punkt "." und nicht mit einem Ausfrufezeichen "!"

Bei mir funktioniert es.

Me.Seite2.Visible = False

DF6GL

Hallo,


ich glaube nicht, dass es mit "." oder "!" zu tun hat...


Wie lautet der gesamte(!) Prozedur-Code?  Welches Ereignis wird benutzt? WO (in welchem Form)  steht der Code?

Ist der Name der Registerseite wirklich "pgeSeite3" ?

SteBa

Hallöchen,

also mit dem Punkt hat es tatsächlich nichts zu tun, habe ich zur Sicherheit gerade nochmal probiert  - das gibt:

---
Fehler beim Kompilieren:
Methode oder Datenobjekt nicht gefunden
---

Zum Besseren Verständnis also hier nochmal der gesamte relevante Codeabschnitt (Die Prozedur, die Bei Klick auf besagten Button in Formular A ausgeführt wird):

Private Sub Befehl17_Click()
On Error GoTo Err_Befehl17_Click

   Dim stDocName As String
   Dim stLinkCriteria As String
       
   stDocName = "3_datensatz_eingabe"
   DoCmd.OpenForm stDocName, , , stLinkCriteria
   
   ' Formular "leeren" für neuen Datensatz
   DoCmd.GoToRecord acDataForm, stDocName, acNewRec
   
   ' und das hier der Versuch, die Seite3 des Registers "auszublenden" - mit dem bekannten Fehler
   Me.pgeSeite3.Visible = False
       
Exit_Befehl17_Click:
   Exit Sub

Err_Befehl17_Click:
   MsgBox Err.Description
   Resume Exit_Befehl17_Click
   
End Sub


Das Registerkartenelement heißt "regRegister1". Die 3 Seiten (Reiter) heißen "pgeSeite1" bis "pgeSeite3". Also jeweils der "Name" den ich im Reiter "Andere" der Eigenschaftenübersicht vergeben habe.

Hoffe, das macht es ein wenig verständlicher (auch, wenn meine Benamsungen noch etwas unbeholfen anmuten...)

;-)

Gruß
Stefan

DF6GL

Hallo,

ok, der Fehler liegt darin, dass auf die Registerseite im AKTUELLEN Form (das aufrufende) referenziert wird, und da gibt es das Register gar nicht,  Wenn dann muß es so lauten:

   DoCmd.GoToRecord acDataForm, stDocName, acNewRec        
' und auf das aufgerufene Form referenzieren:

Forms(stDocName)!pgeSeite3.Visible = False

Wobei insgaesamt besser wäre, die Steuerung der Reg-Seite über den Openargs-Parameter zu bewerkstelligen:


.
.
DoCmd.GoToRecord acDataForm, stDocName, acNewRec  , Openargs:=False      
'und das hier der Versuch, die Seite3 des Registers "auszublenden" - mit dem bekannten Fehler    
Me.pgeSeite3.Visible = False
.
.


und im aufgerufenen Form:

Sub Form_Load()
Me!pgeSeite3.Visible = nz(Me.Openargs,true)
End Sub


SteBa

Hallo Franz,

super! Das war's - vielen, vielen Dank!! Habe schon so etwas vermutet (Zugriff auf Eigenschaften, die es noch gar nicht gibt - hätte es aber mit diesem Ansatz trotzdem nicht lösen können).
Vllt. merkt man auch, dass ich mit Access gerade erst angefangen habe (und das auch noch mit einem geerbten Projekt, wenn es an sich auch recht klein ist...)   ;-)

Ich habe also noch sehr viel zu lernen - daher möchte ich auch gerne noch auf Deine 2. Anmerkung zurückzukommen:

Du willst damit sagen, dass es besser/sauberer ist, alles, was mit der Steuerung/Erscheinugsbild eines Forms zu tun hat, auch in demselben zu erledigen (wenn nötig, wie in meinem Beispiel, durch Parameterübergabe).

Dabei verstehe ich nur nicht den Teil hintern dem "=" , wie Du es gezeigt hast. Was bewirkt das im konkreten Beispiel?

...=nz(Me.Openargs,true)

Wäre nett, wenn Du das noch auflösen könntest.

Vielen Dank nochmal,
Grüße
Stefan

DF6GL

Hallo,

"Du willst damit sagen, dass es besser/sauberer ist...."     ja..  Objektübergreifende  Referenzierungen sind fehlerträchtig und instabil.  Außerdem verletzt das "objektorientierte Programmierung(stechnik)" , wenngleich hier in VBA davon nicht allzuviel zu bemerken ist.


..=nz(Me.Openargs,true)


bedeutet für die nz()-Funktion (siehe auch die VBA-Hilfe):

Im Fall, dass das Openargs-Argument (Openargs-Eigenschaft) "leer" (NULL) ist, weil gar nicht benutzt, dann liefere den Wert "False" (und weise den der Visible-Eigenschaft zu. Im Fall, dass Openargs nicht leer ist, also beim Aufruf mit einem Wert gesetzt ist, dann liefere genau diesen Wert (und weise...)

Openargs wird z. B. dann nicht benutzt, wenn das Form direkt aus dem Datenbankfenster mit Doppelklick geöffnet wird. Ohne die NZ()-Funktion würde NULL an die Visible-Eigenschaft zugewiesen, was einen Fehler zur Follge hätte.

SteBa

Hallo Franz,

spitze, vielen Dank für die anschauliche Erläuterung!

Gruß und bis bald mal
Stefan