Office: Me.Steuerelement Variable zum Formular öffnen

Helfe beim Thema Me.Steuerelement Variable zum Formular öffnen in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo, hänge mal wieder an einer kniffeligen Sache. Und zwar habe ich eine Abfrage mit Spalte A, B, 0000, 0015, 0030, 0045, 0100, 0115 etc - für... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Schlauchi, 28. März 2010.

  1. Schlauchi Erfahrener User

    Me.Steuerelement Variable zum Formular öffnen


    Hallo,

    hänge mal wieder an einer kniffeligen Sache. Und zwar habe ich eine Abfrage mit Spalte A, B, 0000, 0015, 0030, 0045, 0100, 0115 etc - für jede 15 Minuten am Tag eine Spalte (96 Spalten).
    Ein Formular welches nun 96 + 2 Felder hat.

    EINES der 96 Felder (Person) + die zwei Felder A (Datum) und B(Ort) definieren nun einen genauen Datensatz in der Ursprungs Tabelle.

    In der Zeile im Formular wird mir alles angezeigt. Nun möchte ich aber die Person als Hyperlink definieren - beim Draufklicken soll sich ein Formular öffnen.

    Frage - wie öffne ich das Formular mit der Variablen "Person". Muss ich nun 96 mal eine VBA Abfrage schreiben und für jedes Feld einzeln die Sache definieren? Oder gibts sowas wie Me.Control bzw. Me.Value etc. um immer den Inhalt auszulesen, von dem Namen den ich angeklickt habe?

    Vielleicht denke ich zu kompliziert. Mit den drei Variablen möchte ich die TagesplanID in der Tabelle finden - die mit genau dann einen Datensatz öffnet.

    Hier mein Code für eine Zelle... aber das geht auch noch nicht...
    Code:
    Private Sub I2345_DblClick(Cancel As Integer)
    Dim searchID As String
    searchID = DLookup("ScheduleID", [INFO_24_Feed_AC_SP_IP], "[IPSP] =" & Me.I2345 And "[ScheduleAC] = " & Me.AC_Registration And "[ScheduleDate] = &  # Me.ScheduleDate # ")
    MsgBox searchID, vbInformation
    End Sub
    Aber es bringt nur Fehler. Ich klicke quasi auf das eigene Feld als Hyperlink - bekomme aber den Wert nicht raus.
     
    Schlauchi, 28. März 2010
    #1
  2. miriki Erfahrener User
    So auf den ersten Blick könnte ich mir vorstellen, daß Du vielleicht mit einer RadioGroup was werden könntest. Mit dem OnClick-Event könntest Du dann den aktuellen Wert der RadioGroup auslesen und abhängig davon einen Datensatz in einem anderen Formular anzeigen.

    Das hat aber, zumindest meiner Meinung nach, einen kleinen Haken:

    Du hast jetzt schon 98+ Steuerelemente auf Deinem Formular. Das ist schon jenseits der Grenze, die ich normalerweise versuche, nicht zu überschreiten: ca. 50 Steuerelemente (ohne Label mitzuzählen). Mit der RadioGroup würden nochmal 97 (die Gruppe und die 96 RadioButtons) dazukommen.

    Ok, die Rechner werden immer leistungsfähiger, es steht mehr Speicher zur Verfügung und in meinem grenzenlosen Optimismus glaube ich immer noch, daß die Anwendungen in neuerer Version auch auf Leistung optimiert sind. Aber ich erinnere mich noch zu häufig an Formulare, in denen eine Matrix (wie z.B. 52 Wochen in x- und 20+ Mitarbeiter in y-Richtung) dargestellt wurde und das Ding bei jeder Aktivität nur noch elendig auf dem Bildschirm "waberte".

    Als "langsam" empfinden die meisten Anwender es eigentlich nicht, wenn eine Aktion mal mehrere Minuten dauert. Das wird schnell akzeptiert. Aber nach einem Mausklick 1/2 Sekunde verzögert eine Reaktion sehen, das ist meistens ein Grund für Meckereien.

    Eventuell wäre aber auch das ein Ansatz:
    Code:
    Option Compare Database
    Option Explicit
    
    Dim ControlName_Name As String
    
    ' ----------------------------------------------------------------------
    
    Private Sub ControlName_merken(s$)
        ControlName_Name = s
    End Sub
    
    Private Sub ControlName_anzeigen()
        MsgBox ControlName_Name
    End Sub
    
    ' ----------------------------------------------------------------------
    
    Private Sub Textfeld_1_GotFocus()
        ControlName_merken Me!Textfeld_1.Name
    End Sub
    
    Private Sub Textfeld_1_DblClick(Cancel As Integer)
        ControlName_anzeigen
    End Sub
    
    [...]
    Das wäre dann zwar eine Fleißarbeit (2 Ereignisse für jedes Textfeld erfassen), würde aber ohne zusätzliche Steuerelemente auskommen.

    Gruß, Michael
     
    miriki, 29. März 2010
    #2
  3. miriki Erfahrener User
    Da hab ich doch glatt den Anhang vergessen...

    Gruß, Michael
     
    miriki, 29. März 2010
    #3
  4. miriki Erfahrener User

    Me.Steuerelement Variable zum Formular öffnen

    Und außerdem zu kompliziert gedacht... Gerade eben fiel mir noch ein, daß man mit "ActiveControl" ja das aktivierte Objekt erhält, somit auch das Objekt mit Fokus. Das ganze Merken des Namens kann man sich also sparen und direkt:
    Code:
    Private Sub ControlName_anzeigen()
        'MsgBox ControlName_Name
        MsgBox ActiveControl.Name
    End Sub
    benutzen.

    Gruß, Michael
     
    miriki, 29. März 2010
    #4
  5. Schlauchi Erfahrener User
    Genial! Danke - so einfach kann es sein.

    Nur noch eine Kleinigkeit - wie bekomme ich nun den Wert den ich in das Textfeld reingeschrieben habe bzw. aus der Datenbank kommt - auch mit raus?

    MsgBox ActiveControl.Name 'Gibt mir ja den FeldNamen.
    Und wie den Wert??
    MsgBox ActiveControl.ItemData geht leider nicht.

    Gruß Björn
     
    Schlauchi, 29. März 2010
    #5
  6. Schlauchi Erfahrener User
    Hallo nochmal... bin nun etwas weiter vorangekommen.
    Aber - ich hänge noch an der übergabe von der "ActiveControl.Name" as String.

    Code:
    Private Sub I2345_Click()
    
    Dim activBox As Variant
    activeBox = "Me." & ActiveControl.Name
    Dim activContent As String
    activeContent = activeBox
    Dim meContent As String
    meContent = Me.I2345
    Dim meAc As String
    meAc = Me.AC_Registration
    Dim meSchedule As String
    meSchedule = Me.[INFO 24 Cross.ScheduleDate]
    
    Dim searchID As String
    searchID = DLookup("ScheduleID", "[INFO 24 Feed AC SP IP]", "[IPSP] = '" & meContent & "' And [ScheduleAC] = '" & meAc & "' And [ScheduleDate] = " & meSchedule)
    MsgBox searchID
    End Sub
    Statt meContent = Me.I2345 hätte ich gerne meContent = activeBox
    und das dann im DLookup drinnen... er nimmt mir bei activeBox das als TEXT wert - und nicht als Variable die auf ein Feldwert geht.

    Desweiteren hänge ich am nachschauen vom "Datum" (meSchedule). Hab nun fast alle Varianten durch # meSchedule # oder ' & meSchedule & "'"

    Denk ich wieder zu kompliziert??
     
    Schlauchi, 29. März 2010
    #6
  7. Schlauchi Erfahrener User
    Das mit dem Datum hab ich nun auf Industrie Datum umgestellt - sprich 40217 ist der 08.02.2010 - und somit läuft der Hase.

    Code:
    Dim meContent As String
    meContent = Me.I2345
    Dim meAc As String
    meAc = Me.AC_Registration
    Dim meSchedule As String
    meSchedule = Me.XY
    
    Dim searchID As String
    searchID = DLookup("ScheduleID", "[INFO 24 Feed AC SP IP]", "[IPSP] = '" & meContent & "' And [ScheduleAC] = '" & meAc & "' And [ScheduleDateNumber] = " & meSchedule)
    MsgBox searchID
    
    Dim sWHERE As String
    sWHERE = "[ScheduleID] = " & searchID
    
    DoCmd.OpenForm "INFO24Schedule", acNormal, , sWHERE
    Jetzt fehlt mir nur noch wie ich die meContent Variable als Feldabfrage übergeben kann.
     
    Schlauchi, 29. März 2010
    #7
  8. miriki Erfahrener User

    Me.Steuerelement Variable zum Formular öffnen

    activecontrol.value?

    Gruß, Michael
     
    miriki, 29. März 2010
    #8
  9. miriki Erfahrener User
    Es könnte in der Richtung klappen:
    Code:
    Dim meContent As String
    meContent = Me!I2345.value
    Dim meAc As String
    meAc = Me!AC_Registration.value
    Dim meSchedule As String
    meSchedule = Me!XY.value
    [...]
    Benutzt Du eigentlich "option explicit" in Deinem Source? In einem anderen Posting paßten die DIM nicht zu den Variablen. Da hattest Du immer ein "e" bei "active" vergessen...

    Und das mit dem Datum... Ich hab dafür eine kleine Umwandlungs-Routine namens "SQL_Date" gebastelt. Diese wandelt mir ein Datum (also eine Variant-Variable) in einen String um. Und der hat dann das amerikanische Format "#jjjj/mm/dd#" (Oder war mm und dd auch noch anderes herum? Bin mir jetzt nicht ganz sicher...). Damit kann man dann DlookUp, SQL-Queries und Konsorten füttern.

    Aber meistens benutze ich auch eher das Industriedatum, weil es "gefühlt" leichter zu handhaben ist, insbesondere wenn es um Zeitrechnung (Stunden) geht.

    Gruß, Michael
     
    miriki, 29. März 2010
    #9
  10. Schlauchi Erfahrener User
    Hallo Michael,

    na die Abfrage funktioniert soweit.

    Nur möchte ich statt:
    Code:
    meContent = Me!I2345.value 
    lieber:
    Code:
    meControl = activecontrol.name
    benutzen.

    Ich bekomme zwar den "Text" aus dieser Variable ...
    Aber benütze ich nun meControl als ein Teil der Bedingung
    z. B.
    Code:
    ControlValue = Me!&meControl
    Dann bekomme ich den Wert Me!I2345 als "Text" und nicht dann den Feld.Value z.B. "München"

    Wenn das nicht geht - muss ich halt für jedes einzelne Feld den Me!I2345 ; Me!I2330; Me!I2315 etc anpassen....

    Also den Steuerelement Namen als Teil eines Strings hernehmen....
     
    Schlauchi, 29. März 2010
    #10
  11. miriki Erfahrener User
    Ich muß gestehen... Ich bin verwirrt...

    Mit activecontrol.name hast Du den Namen des Controls, auf dem der Doppelklick stattfand. Mit activecontrol.value hast Du den Wert, der in diesem Control steht. Und wenn der Name des Controls dem Feld in der Tabelle entspricht, kannst Du den auch direkt für die Abfrage benutzen.

    Also z.B. Du hast ein Control "Nachname" auf Deinem Formular. In der Tabelle "tbl_Adressen" gibt es ebenfalls ein Feld "Nachname". Die ControlSource von "Nachname" ist das Feld "[Nachname]" aus der entsprechenden Tabelle. Und in dem Feld steht im aktuellen Datensatz z.B. ein "Schmidt" als Value.

    Ein Doppelklick mit dem passenden Ereignis
    Code:
    MsgBox "Control: " & ActiveControl.Name & Chr$(10) & "Value: " & ActiveControl.Value
    würde Dir jetzt
    Code:
    Control: Nachname
    Value: Schmidt
    zurückgeben.
    Und für eine Abfrage läßt sich das direkt weiter verarbeiten:
    Code:
    s = "SELECT * FROM tbl_adressen WHERE [" & ActiveControl.Name & "] = '" & ActiveControl.Value & "';"
    MsgBox s
    Problematischer wird es erst, wenn Deine Control-Namen nicht den Feld-Namen in der Tabelle entsprechen. Dann kannst Du aber immer noch über activecontrol.controlsource den Feldnamen herausfinden.
    Code:
    Private Sub ControlName_anzeigen()
    
        Dim control_name As String
        Dim control_value As String
        Dim control_source As String
    
        Dim sql_select As String
        Dim sql_from As String
        Dim sql_where As String
        Dim sql_query As String
    
        control_name = ActiveControl.Name
        control_value = ActiveControl.Value
        control_source = ActiveControl.ControlSource
    
        MsgBox "Control: " & control_name & Chr$(10) & "Value: " & control_value & Chr$(10) & "Source: " & control_source
    
        sql_select = "*"
        sql_from = "tbl_staedte"
        sql_where = "[" & control_source & "] = '" & control_value & "'"
        sql_query = "SELECT " & sql_select & " FROM " & sql_from & " WHERE " & sql_where & ";"
        MsgBox sql_query
    
        DoCmd.OpenForm "frm_ControlName_Name_Details", , , sql_where
    
    End Sub
    So kannst Du ein neues Formular öffnen und dort alle Datensätze anzeigen, die zu dem Doppelklick-Control passen. Ich hab das ursprüngliche Beispiel mal etwas aufgebohrt und eine "tbl_staedte" darunter gelegt, die aus den Feldern "Land", "Bundesland" und "Stadt" besteht. Das Formular hab ich zu "endlos" gewandelt und eine Kopie davon erstellt.

    Wenn du jetzt z.B. auf die mittlere Spalte "Bundesland" einen Doppelklick auf einem Feld mit z.B. dem Wert "Schleswig-Holstein" machst, öffnet sich das 2. Formular mit eben nur diesen passenden Datensätzen. Die eine oder andere Messagebox dazwischen macht es vielleicht noch etwas deutlicher.

    Ich hoffe, ich habe Dich jetzt richtig verstanden. Ansonsten müßtest Du es vielleicht doch noch etwas klarer herausstellen...

    Gruß, Michael
     
  12. Schlauchi Erfahrener User
    Hallo Michael,

    sorry für die Verwirrung...

    Also ganz einfach meContent durch ActiveControl.Value - und es läuft :-)

    Den Zwischenschritt das ActiveControl.Value an eine Variable übergeben war überflüssig - hat mich aber durchaus einige Stunden verwirrt.

    Danke nochmals!
     
    Schlauchi, 30. März 2010
    #12
Thema:

Me.Steuerelement Variable zum Formular öffnen

Die Seite wird geladen...
  1. Me.Steuerelement Variable zum Formular öffnen - Similar Threads - Steuerelement Variable Formular

  2. Formularsteuerelement Textfeld: Selbe Formatierung wie verlinkte Zelle?

    in Microsoft Excel Hilfe
    Formularsteuerelement Textfeld: Selbe Formatierung wie verlinkte Zelle?: Hallo, ich bin ja gerade dabei ein Bestellformular mit Excel zu realisieren. Das ganze sieht soweit auch schon sehr gut aus und funktioniert weitgehendst. Die Textfelder sind nun alle verlinkt...
  3. Word Steuerelemente/Formular erstellen

    in Microsoft Word Hilfe
    Word Steuerelemente/Formular erstellen: Hallo, ich möchte ein Formular mit 20 kleinen Textfeldern erstellen, die auf einer Seite an vordefinierten Stellen sind. Das fertige Formular soll so angewendet werden, dass ich in die 20...
  4. Schnellbausteine, Auto Text und Auswahlfeld in Vorlage

    in Microsoft Word Hilfe
    Schnellbausteine, Auto Text und Auswahlfeld in Vorlage: Hallo in die Runde, ich stehe in der Firma vor folgender Herausforderung: Mein Bereich stellt für den Vertrieb standardisierte Angebote und sonstige Kundenschreiben bereit. Diese sollen durch...
  5. Bericht Steuerelementinhalt Kreuztabelle

    in Microsoft Access Hilfe
    Bericht Steuerelementinhalt Kreuztabelle: Hallo an alle, ich habe da mal eine Frage. Ich fülle einen Bericht über eine recht umfangreiche Kreuztabelle (Angestellte und deren Schulungen). Nun Muss ich die Angestellt auch Filtern können...
  6. Dropdownfeld in Word Formular

    in Microsoft Word Hilfe
    Dropdownfeld in Word Formular: Hallo, ich arbeite an einem Word Formular wo ich einige Dropdownfelder mit Ja/Nein einfügen möchte. Ich will, dass standardmäßig Nein ausgewählt ist und der User zwischen ja und nein wählen...
  7. MS Access Formular - mehrere Datensätze pro Steuerelement hinzufügen?

    in Microsoft Access Hilfe
    MS Access Formular - mehrere Datensätze pro Steuerelement hinzufügen?: Hallo Ihr Lieben, ich bastle gerade ein Formular. Nun such ich nach dem passenden "Steuerelement", dass ich mehrere Daten pro Feld eingeben kann, z.B. getrennt durch ein Semikolon oder ähnliches?...
  8. Excel Desktop App und Active X Steuerelemente

    in Microsoft Excel Hilfe
    Excel Desktop App und Active X Steuerelemente: Hallo, ich benutze Office 365 Single und habe in der Cloud eine Datei gespeichert, die Active-X-Steuerelemente, VBA und Makros enthält. In der Web-App von Excel 365 wird mir an der Stelle des...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden