Neuigkeiten:

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

Mobiles Hauptmenü

verschiedene Formulare über Schaltfläche öffnen

Begonnen von wieseRS, Oktober 10, 2010, 19:13:10

⏪ vorheriges - nächstes ⏩

wieseRS

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?


Hondo

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


database

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

wieseRS

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

database

#4
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

wieseRS

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.

oma

Hallo,

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


Gruß Oma
nichts ist fertig!

database

#7
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  ;)

wieseRS

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




wieseRS

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

database

Hallo,
verwendest du einen Mozilla Firefox-Browser?

wieseRS

#11
Ja genau. Schluckt der etwa den roten Stern?

verwende jetzt gerade Opera und sehe auch keinen roten Stern.

database

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

Hondo

Hallo,
also ich seh es im Firefox 3.x
Muss mal nach den Einstellungen sehen.

Andreas

database

#14
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