Neuigkeiten:

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

Mobiles Hauptmenü

Position im Listenfeld

Begonnen von Basti123, September 07, 2011, 14:09:46

⏪ vorheriges - nächstes ⏩

Basti123

Hallo zusammen,

wahrscheinlich ist die Antwort ganz simpel aber kann ich irgendwie herausfinden welche Nummer ein Eintrag in einem Listenfeld hat? Es ist alphabetisch geordnet. Möchte nämlich beim öffnen den Fokus auf ein bestimmten Eintrag setzen.

Ich weis nicht wie man es löst aber ich denke an etwas, was mir die Zahl sagt, die dann hier reingehört: Me.Listenfeld.Selected(X)
Möglicherweise kann man auch direkt sagen ich möchte dass der Fokus auf das Wort XYZ gesetzt wird.

Wie es gelöst werden kann ist eigentlich egal. Hoffe mir kann jemand eine Lösung sagen.

Danke schon mal!!!

Grüße
Basti

Jonny

Hallo Basti,

vieleicht hilft dir das:
Textfeld: MeinEintrag
Listenfeld: Liste1

beim öffnen:
me!liste1 = MeinEintrag

Gruß

Johann

Basti123

Das hab ich mal ausprobiert, klappt aber nicht:

Dim i As Integer
Dim x As Integer

i = 0
x = 0

For i = 0 To 50 Step 1
    If Me.Country = "Germany" Then
        x = i
    End If
Next i
Debug.Print x
Debug.Print i

Me.Country.SetFocus
Me.Country.Selected(x) = True


Ausgegeben wird x=0 und i=51

Deinen Ansatz versteh ich nicht so recht.. Kann ich denn nicht irgendwie in der Liste einen nach dem anderen Eintrag durchgehen und schauen, ob da "Germany" steht und wenn ja dann soll er die mitgezählte Variable nehmen und die trag ich unten beim Selectbefehl ein?

Grüße
Basti

Jonny

Hallo Basti,
du hast doch bestimmt ein Feld beim öffnen, dass das Listenfeld steuern soll.
Wie heist dieses Feld?

Welches Feld ist im Listenfeld das gebundene Feld?

Gruß

Johann

database

#4
Hallo,

das Listenfeld hat ja eine Datenherkunft - wie lautet die?
Wieviele Spalten hat das Listenfeld?
Willst du immer "Germany" markiert (ausgewählt) haben?

Hat dein Listenfeld nur eine Spalte und enthält den Eintrag 'Germany' an einer beliebigen Stelle dann...


Private Sub Form_Open(Cancel As Integer)
    Me!DeinListenfeld.Value = "Germany"
End Sub


... oder du durchläufst die Liste der Einträge wie folgt:


Private Sub Form_Open(Cancel As Integer)

Dim y as long, i As Long

For i = 0 To Me!DeinListenfeld.ListCount - 1
    If Me!DeinListenfeld.Column(0, i) = "Germany" Then
        y = i
        Exit For
    End If
Next i

Me!DeinListenfeld.Selected(y) = True

End Sub


HTH

Basti123

#5
Guten Morgen,

zu Jonny:
Das Listenfeld ist ungebunden. Es bezieht die Daten aus einer Tabelle.


zu database:
Also das Listenfeld Country ist das erste der Listenfelder und hat die Datenherkunft aus tblCountry: <Country>, was nur der Name ist.  Es hat also nur eine Spalte. "Germany" soll nur beim öffnen markiert werden, weil damit am häufigsten gearbeitet wird.


Private Sub Form_Open(Cancel As Integer)
Me!DeinListenfeld.Value = "Germany"
End Sub

In den restlichen Listenfeldern werden jetzt zwar nur die Daten für "Germany" angezeigt, aber Germany ist nicht markiert.


Bei dem anderen ist das Ergebnis das gleiche. Hier wird allerdings das ausgegeben i=33 y=0. Die Daten für "Germany" werden aber angezeigt.








Edit:
Wenn ich deinen zweiten Vorschlag nehme, kann ich nichts mehr in den Listenfeldern anklicken, also in keinem mehr; Es funktionieren auch keine Buttons mehr und gar nichts :-o

database

Hallo, guten Morgen,

also ich kann das so nicht ganz nachvollziehen.
Wenn ich das auf einem Formular simuliere wird mit obigem Code der Eintrag im Listenfeld ausgewählt UND markiert.

Gleiches bei der Variante mit der Schleife...

ZitatIn den restlichen Listenfeldern werden jetzt zwar nur die Daten für "Germany" angezeigt, aber Germany ist nicht markiert.
Verwendest du da abhängige Listen (du sprichst von mehreren Listenfeldern)?
Wo wird 'Germany' nicht markiert im ERSTEN Listenfeld, für welches der Code relevant wäre?

Kannst du nicht deine DB mit dem Formular und den relevanten Tabellen plus ein paar Spieldaten hier raufladen, ich würde mir das gerne mal in natura anschauen.

Jonny

Guten Morgen,

Peter war jetzt schneller. Natürlich funktioniert der Code.
Ich wollte gerade vorschlagen bei den Befehl
  Me!DeinListenfeld.Value = "Germany"
die Konstante "Germany" durch ME!Tabellenfeld zu ersetzen.

Das hat den Vorteil das beim Blättern und Suchen immer der richtige Eintrag im Listenfeld
markiert ist.

Gruß

Johann

Basti123

#8
hochladen kann ich sie nicht.. müsste auch Tabellen und so löschen, ist zu viel Aufwand. Hab einfach mal ein bisschen was in ein Bild gepackt. Hoff es hilft. Wenn du andere Sachen benötigst sag bescheid. Wenn ich mal mehr Zeit habe, kann ich die DB auch abspecken und hochladen aber bin ziemlich im Stress.

Grüße Basti


database

#9
Hallo,

naja, mir ist schon klar, warum dein Eintrag 'Germany' nicht markiert BLEIBT - denn ursprünglich ist er das schon...

Der Grund ist der, dass du NACH dem Auswählen nochmals die Datenherkunft ÄNDERST - und damit ist die Markierung für die Fische!
Stelle die Zeile mit Me!Country.RowSource  VOR  Me!Country.Value ... dann sollte es laufen!

Der Code den du oberhalb stehen hast, also der mit der Schleife, entspricht NICHT meinem Vorschlag.
Ich habe keinen Focus gesetzt sondern die Auswahl direkt zugewiesen!

Basti123

Das hab ich gerade ausprobiert. Funktioniert leider auch nicht..

Private Sub Form_Open(Cancel As Integer)
'Formulargröße ändern
DoCmd.MoveSize 1000, 1000, 15000, 10000

'Befehlsschaltflächen / Felder sichtbar / unsichtbar
Me!UfrmLogindata.Form.Visible = True
Me!UfrmDetails.Form.Visible = False
Me.DeviceID.Visible = False
Me.Description.Visible = False
Forms![frmExplorer]![UfrmDetails]!HC.Visible = False

'Country sortieren
Me!Country.RowSource = "SELECT * FROM tblCountry ORDER BY Country"

Me!Country.Value = "Germany"

End Sub

DF6GL

#11
Hallo,

die "Markierung setzen" funktioniert nur, wenn der zugewiesene Wert in der gebundenen Spalte des Listenfeldes steht:

gebundene Spalte: 1


Me!Country.RowSource = "SELECT Country, Abkuerzung FROM tblCountry ORDER BY Country"
Me!Country.Value = "Germany"


wobei in Tabellenfeld "Country" die Ländernamen (z. B.  "Germany") stehen .

database

Hallo,

ist 'Country' die ERSTE Spalte im Listenfeld oder gibt es davor noch eine - eventuell eine ID, die mit Spaltenbreite 0cm ausgeblendet ist?

Ich frage das, weil du die Dateherkunft mit SELECT * bestimmst

Me!Listenfeld.Column(0, i) .... '0' bestimmt die ERSTE Spalte im Listenfeld, unabhängig davon ob sie sichtbar ist oder nicht!
'Country' MUSS die gebundene Spalte sein!


Dim y As Long, i As Long

Me.Listenfeld.RowSource = "SELECT * FROM Tabelle1 ORDER BY Eintrag"

For i = 0 To Me!Listenfeld.ListCount - 1
    If Me!Listenfeld.Column(1, i) = "G" Then
        y = i
        Exit For
    End If
Next i

Me!Listenfeld.Selected(y) = True


mit obigem Code wird der Eintrag 'G' ausgewählt UND markiert - im gezeigten Fall befindet sich die Spalte mit dem Eintrag 'G' in der 2. Spalte des Listenfeldes - daher auch  Me!Listenfeld.Column(1, i)

Basti123

Also jetzt wären wir wieder hier: Es funktioniert, alle Daten zu Germany werden angezeigt, Germany ist markiert,
ABER: jetzt kann ich keinen einzigen Butten mehr auf dem Formular anklicken :-o ich versteh es einfach nicht wo jetzt wieder der Fehler ist...

Dim y As Long, i As Long
Me.Country.RowSource = "SELECT * FROM tblCountry ORDER BY Country"

For i = 0 To Me!Country.ListCount - 1
    If Me!Country.Column(1, i) = "Germany" Then
        y = i
        Exit For
    End If
Next i
Debug.Print y
Debug.Print i

Me!Country.Selected(y) = True

database

ja hast du denn die Buttons irgendwo per Code oder in den Eigenschaftsfenstern DEAKTIVIERT?

Durch die Ausführung des Codes passiert da nix in der Richtung