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
Hallo Basti,
vieleicht hilft dir das:
Textfeld: MeinEintrag
Listenfeld: Liste1
beim öffnen:
me!liste1 = MeinEintrag
Gruß
Johann
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
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
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
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
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.
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
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
(http://www.imgbox.de/users/public/thumbnails/URT0yOW8q3_t.gif) (http://www.imgbox.de/show/img/URT0yOW8q3.png)
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!
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
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 .
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)
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
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
Ich hab nichts deaktiviert. Ich kann keine Buttons anklicken und in keinem Listenfeld irgendeinen Eintrag anklicken
OK, noch ein Versuch...
Nimm folgendes, auch in Anlehnung an den Vorschlag von Franz (ich habe deine zusätzlichen Dinge drin gelassen) und lass die Schleifenlösung mal weg:
Private Sub Form_Open(Cancel As Integer)
'Country sortieren
Me!Country.RowSource = "SELECT Country, Abkuerzung FROM tblCountry ORDER BY Country"
'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
Me!Country.BoundColumn = "1"
Me!Country.Value = "Germany"
End Sub
... des gibt's ja net dass des net rennt!
So vielen Dank!!! hab noch ein paar Sachen geändert aber jetzt funktioniert alles!
DANKE!
Grüße Basti
Hallo,
schön wenns nun endlich läuft!
Zitat... hab noch ein paar Sachen geändert ...
fallen diese Erkenntnisse unter die Geheimhaltungspflicht oder würdest du sie dem Forum auch mitteilen? ;)
Da ich unter jedem Feld drei Buttons habe (New, Edit, Delete) musste ich diese noch abändern. Das hat ja nicht direkt damit etwas zu tun, sonst hätte ich es noch gepostet ;-)
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 und Fokus auf Germany setzen
Me.Country.RowSource = "SELECT CountryID, Country, Krzl FROM tblCountry ORDER BY Country"
Me!Country.BoundColumn = "2"
Me!Country.Value = "Germany"
End Sub
Habe nur noch die ID mit reingenommen und die Zahl dementsprechend bei BoundColumn geändert. Also wie man sieht keine dramatischen Veränderungen ;-)
Vielen Dank noch mal!
edit: und zur "geheimhaltung": da gehts ja nur um die Daten, und um den unteren Bereich im Formular ;-) aber wenn ich den Bereich rausschmeisse muss ich 1000 Sachen im VBA ändern und das war mir zu viel Aufwand ;-)
Aha, na keine wirklich großartigen Änderungen.
Was mir allerdings noch nicht ganz einleuchtet ist die Änderung der Formulargröße bei jedem Öffnen.
Du KÖNNTEST doch auch die Größe einmalig festlegen.
Stimmt auch wieder :D ja naja hab da gar nicht groß drüber nachgedacht :-/ Danke!