Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: wieseRS am Oktober 10, 2010, 19:13:10

Titel: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 10, 2010, 19:13:10
Hallo
Ich möchte über eine Schaltfläche verschiedene Formulare öffnen. Der entsprechende Formularname steht in einer Tabelle.
Welches Formular geöffnet wird ist von 2 Textfeldern mit Variablen abhängig, dessen Werte auch in der Tabelle stehen.
Der Name kann über eine Abfrage oder direkt aus der Tabelle mit Filtern gelesen werden.
Da dies mit einem macro wohl nicht geht, brauche ich einen entsprechenden VBA-code.
Kann mir hier jemand helfen?

Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: Hondo am Oktober 10, 2010, 19:31:59
hallo,
lies die Tabelle per Recordset in einer Schleife aus und öffne per "docmd.openform rs!Formname" das jeweilige Formular.
Wo hast du da Probleme?
Recordset geht so:

Dim db As DAO.Database
Set db = Currentdb
Dim rs AS DAO.Recordset
Set rs = db.openRecordset("Select Formularname From Tabelle", dbopendynaset)
Do until rs.eof
    DoCmd.openform rs!Formularname
loop
rs.close
set rs = nothing
set db = nothing

Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 10, 2010, 19:36:16
Hallo,

gehe ich davon aus, dass die beiden Textfelder txt1 und txt2, der auslösende Button cmdOpen und das Tabellenfeld FormName heissen mag,
KANN das mit folgendem anzupassenden Code bewerkstelligt werden.


Private SubcmdOpen_Click()

    Dim strName As String
    'ermitteln des Formularnamens
    strName = DLookup("FormName","DeineTabelle","txt1Vergleichsfeld='" & Me!txt1 & "' AND txt2Vergleichsfeld='" & Me!txt2 & "'")
    'Öffnen des Formulars mit dem ermittelten Namen
    DoCmd.OpenForm strName

End Sub


Durch entsprechende Anpassung kann natürlich auf das Auswahlkriterium auch mit nur einem der beiden Textfelderinhalte (txt1 / txt2) bewerkstelligt werden - z.B.

DLookup("FormName","DeineTabelle","txt1Vergleichsfeld='" & Me!txt1 & "'")

HTH
Peter
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 10, 2010, 19:47:47
Mit VBA wohl noch so generell meine Probleme.

Wie komme ich jetzt an den Namen des Formular?

Die Tabelle heißt "button". In den Feldern "ID" und "Nummer" stehen Zahlen, z.B. 1 und 2. Im Feld "formular" steht der entsprechende Formularname, das geöffnet werden soll.
Die Schaltfläche heißt "button1" und absolut super wäre auch noch wenn die Schaltfläche deaktiviert würde, wenn das Feld "Bezeichnung" in der gleichen Tabelle  leer ist.
Hoffe ich verlange nicht zuviel.
Gruß  Roland
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 10, 2010, 19:58:23
Naja dann lass unds den Code mal anpassen:


Private Sub button1_Click()

   Dim strName As String
   'ermitteln des Formularnamens
   strName = DLookup("formular","button","ID=" & CLng(Me!DeinFeldMitID) )
   'Öffnen des Formulars mit dem ermittelten Namen
   DoCmd.OpenForm strName

End Sub


Leider hast du die Namen der Textfelder am Formular nicht bekannt gegeben, daher habe ich ersatzweise 'DeinFeldMitID' angenommen!
Die Typkonvertierung mit CLng habe ich verwendet, da ich nicht weiß ob du dem Feld am Formular in dessen Formateigenschaften eine Zahl als Feldformat zugewiesen hast.

Damit der Button auf deinem Formular deaktiviert wird, wenn in der Tabelle das Feld 'Bezeichnung' leer ist KANNST du folgenden Code im Ereignis
'Beim Anzeigen' deines Formulars unterbringen - also in der Form:


Private Sub Form_Current()

    If Nz(DLookup("Bezeichnung", "button", "ID=" & Nz(Me.DeinFeldMitID, 0)), 0) = 0 Then
        Me!button1.Enabled = False
    Else
        Me!button1.Enabled = True
    End If

End Sub
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 10, 2010, 20:57:26
So habe jetzt mal diese beiden Varianten probiert:

1.   strName = DLookup("formular", "button", "ID=" & CLng(Me!variable3) And "nummer=" & CLng(Me!variable4))

2.   strName = DLookup("formular", "button", "ID=" & Me!variable3 & " ' " And "nummer=" & Me!variable4 & " ' ")

bei beiden kommt Typen unverträglich.
In den Textfeldern ( variable3 und variable4 ) war kein Format angegeben. Habe ich jetzt auf Standardzahl gesetzt, aber auch ohn Erfolg.
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: oma am Oktober 10, 2010, 22:51:12
Hallo,

beide Varianten sind in sich falsch und entsprechen nicht den Vorschlägen von Peter!


Gruß Oma
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 11, 2010, 12:58:28
Aijaijaijai,

ZitatIn den Textfeldern ( variable3 und variable4 ) war kein Format angegeben. Habe ich jetzt auf Standardzahl gesetzt
OK, ändere das aber jetzt mal nicht mehr - das pass schon so   ;D


1. Wenn das Formular- Feldformat Text ist:
  strName = DLookup("formular", "button", "ID=" & CLng(Me!variable3) & " And nummer=" & CLng(Me!variable4))

2. Wenn das Formular - Feldformat z.B. Standardzahl ist:
  strName = DLookup("formular", "button", "ID=" & Me!variable3 & " And nummer=" & Me!variable4)

du KANNST beide Varianten versuchen, wobei's bei Variante 1 eigentlich egal ist, ob dein Feldformat auf Standardzahl oder Text eingestellt ist.


Ist zwar nett, wenn man sich mit einem Vergleich von 2 Werten absichert, ist aber nicht unbedingt notwendig, daher würde ich empfehlen:

strName = DLookup("formular","button","ID=" & CLng(Me!variable3))
...da die ID nur einmalig in der Tabelle vorkommen sollte, kann ein Vergleich mit einem weiteren Feld eigentlich entfallen!

Du mußt dich - um solche Sachen zu bewerkstelligen (Texte und Variablenwerte zusammensetzen) - mit dem Thema 'Zeichenfolgen verketten' z.B in der OH des VBA-Editors beschäftigen.
Dort ist das relativ verständlich beschrieben und behandelt.

Alles klar?  8)
Wenn nicht melde dich einfach wieder!  ;D

Grüße
Peter

p.s.
Noch eine Kleinigkeit - wenn du Codes aus Beiträgen in dein Programm verfrachten willst,
kopier' sie einfach und füg' sie bei dir ein, das erspart eine Menge an Tipperei und vermeidet Abschreibfehler  ;)
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 11, 2010, 20:44:36
Hat geklappt soweit.  Besten Dank dafür.
Gestern abend ging es nicht weil die Tabelle noch ein anderes Format hatte.
Heute bei Tageslicht fiels dann auf.

Code war kopiert, aber da es nicht klappte habe ich natürlich noch dran rum gebastelt.

Mit den 2 Werten ist keine Absicherung, sondern notwendig, da ich hier eine Auswahl von 10 Unterkategorien in 7 Hauptkategorien auswähle.
ID war hier wahrscheinlich ein schlecht gewählter Feldname und hat verwirrt. Es geht ja auch "nur" darum das entsprechende Formular zu öffnen.
Habe mir jetzt 7 Formulare gespart, da ich mit den entsprechenden Wechsel der Befehlsschaltflächen auf alle Kombinationen in einem einzigen Formular zugreifen kann.

Ich habe also 7 Button, die eine Variable setzen und auf der anderen Seite des Formulars 10 Button die je nach Kategorie das entsprechende Formular zum Daten eingeben öffnen. Diese 10 Button haben jetzt fogenden Code (natürlich "nummer" von 1 bis 10):

Private Sub button1_Click()
    Dim strName As String
    'ermitteln des Formularnamens
    strName = DLookup("formular", "button", "ID=" & CLng(Me!variable3) & " And nummer=1")
    'Öffnen des Formulars mit dem ermittelten Namen
    DoCmd.OpenForm strName
End Sub


Die buttons werden jetzt ausgeblendet, wenn in der Tabelle keine Bezeichnung für diesen button in der entsprechen Kategorie vorhanden.
Folgender Code ( geht halt auch bis button 10 hoch):

Private Sub variable3_LostFocus()
    If Nz(DLookup("Bezeichnung", "button", "ID=" & CLng(Me!variable3) & " And nummer=1"), 0) = 0 Then
        Me!button1.Visible = False
    Else
        Me!button1.Visible = True
    End If
    If Nz(DLookup("Bezeichnung", "button", "ID=" & CLng(Me!variable3) & " And nummer=2"), 0) = 0 Then
        Me!button2.Visible = False
    Else
        Me!button2.Visible = True
    End If
    .....

Wahrscheinlich kann man das noch eleganter lösen. Bin aber erstmal total froh, dass es läuft.
Bis gestern Abend praktisch noch nix mit VBA gemacht. Daher war die Lösung einfach nur genial.

Also besten Dank, Peter, für deine Codes und deine Geduld mit einem Anfänger.
Gruß  Roland



Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 11, 2010, 20:56:55
Noch eine kurze Anmerkung:

Würde ja gerne den "roten Stern" klicken, finde ihn aber nicht.
Habe auch in anderen Themen schon gelesen, dass ich wohl nicht der einzige bin.
Also nochmal auf diesem Wege:

Besten Dank
Gruß Roland
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 11, 2010, 21:03:33
Hallo,
verwendest du einen Mozilla Firefox-Browser?
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 11, 2010, 21:23:20
Ja genau. Schluckt der etwa den roten Stern?

verwende jetzt gerade Opera und sehe auch keinen roten Stern.
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 11, 2010, 21:46:05
Hallo Roland,
ja scheinbar ist es so - im IE6 bis IE8 gibts dieses Problem nicht.
Da findest du den roten Stern immer bei den Antworten, die auf deine Anfrage erstellt wurden.
Natürlich mußt du dazu angemeldet sein.

Ich habe das mit dem Firefox zufällig entdeckt, nachdem schon einige nach dem Stern gefraget hatten- habe dann aus Neugier mal den Firefox installiert und siehe da - Kommentar dazu erspar ich mir...  ;)

Habe an den Administrator eine Anfrage diesbezüglich geschickt, mal sehen vielleicht weiß er eine Lösung.

Schönen Abend und weiter viel Spass und Erfolg mit Access!

Peter
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: Hondo am Oktober 11, 2010, 22:36:55
Hallo,
also ich seh es im Firefox 3.x
Muss mal nach den Einstellungen sehen.

Andreas
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 11, 2010, 22:41:29
Ich glaub mich tritt ein Esel!
Jetzt ist er bei mir im Firefox auch zu sehen - ich geb's auf! >:( >:( >:( >:(

Ich hab' ja keinen tüdlüdürü unterm Skalp - da hat alles rechts von 'Zitat' gefehlt und jetzt ist's da - langsam glaub ich's wirklich - das Ding lebt eigentlich und hat den Einschaltknopf nur zur Tarnung!

Gute Nacht
Peter
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: Hondo am Oktober 11, 2010, 23:02:24
Hallo,
dass Mitglieder das mit wenigen Beiträgen nicht gesehen haben lag nur an den Einstellungen, das ist jetzt behoben.
Ansonsten funktioniert das schon korrekt. Manchmal ist das Browserfenster nur zu klein um alles in 1 Zeile darzustellen, dann versteckt sich das Danke-Icon ein wenig.

Andreas
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: wieseRS am Oktober 11, 2010, 23:36:23
Na, jetzt sehe ich ihn auch.
Habe ihn dann auch gleich mal betätigt.

Gruß  Roland
Titel: Re: verschiedene Formulare über Schaltfläche öffnen
Beitrag von: database am Oktober 12, 2010, 07:29:55
Hallo,
in der Zwischenzeit bin ich auch drauf gekommen, dass mich kein Esel tritt!

Folgendes Szenario war am Nichterscheinen udes Sterns unter Firefox die Ursache:

IE8 geöffnet und auf AoM angemeldet. Browser geschlossen OHNE abmelden.
Firefox öffnen - man wird als angemeldet angezeigt - KEIN roter Stern sichtbar.

Mit Firefox 'ein 2. Mal' anmelden - Stern sichtbar.
Das groteske an der Sache ist aber dann noch, dass man bei einer Abmeldung im Firefox sehr wohl auch wirklich abgemeldet wird - glaubt man...
denn im Firefox wird man dann lediglich als abgemeldet nicht mehr angezeigt.
Öffnet man dann den IE wieder - was Wunder - ist man sehr wohl noch angemeldet, der Benutzername erscheint unter 'Wer ist Wo' und in der Liste der Online-User im Fußbereich des Forums.


Fazit - glaube nicht alles was du siehst - angemeldet ist nicht zwangsweise gleich angemeldet!

Guten Morgen
Peter