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?
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
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
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
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
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.
Hallo,
beide Varianten sind in sich falsch und entsprechen nicht den Vorschlägen von Peter!
Gruß Oma
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 ;)
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
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
Hallo,
verwendest du einen Mozilla Firefox-Browser?
Ja genau. Schluckt der etwa den roten Stern?
verwende jetzt gerade Opera und sehe auch keinen roten Stern.
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
Hallo,
also ich seh es im Firefox 3.x
Muss mal nach den Einstellungen sehen.
Andreas
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
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
Na, jetzt sehe ich ihn auch.
Habe ihn dann auch gleich mal betätigt.
Gruß Roland
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