collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 27
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 1
  • Punkt Benutzer Online:

* Forenstatistik

  • stats Mitglieder insgesamt: 13916
  • stats Beiträge insgesamt: 65835
  • stats Themen insgesamt: 8884
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Listenfeld mit Mehrfachauswahl ersten Wert von allen Markierten ermitteln  (Gelesen 1717 mal)

Offline jagger

  • Newbie
  • Beiträge: 42
Hallo,
wie kann man bei einem Listenfeld mit Mehrfachauswahl (einzeln) den ersten Wert (oder den letzten), der markierten Daten auslesen?

Private Sub btnFilialenVerkn_02_Click()
Dim strFilter As String, varElement As Variant
Dim strFilterSET As String
Dim stDocName As String
Const cstrField = "AGKDNR"
Dim intRow As Integer

If Forms!mnu_Kunden!lbxFilialenVerkn.ItemsSelected.count = 0 Then
For intRow = 0 To Forms!mnu_Kunden!lbxFilialenVerkn.ListCount - 1
       Forms!mnu_Kunden!lbxFilialenVerkn.Selected(intRow) = True
Next intRow
End If

strFilterSET = 7676767 'hier soll der erste Wert von AGKDNR (cstrField) rein

strFilter = ""
For Each varElement In Forms!mnu_Kunden!lbxFilialenVerkn.ItemsSelected
If strFilter <> "" Then ' " or " Anhaengen
strFilter = strFilter + " or "
End If
strFilter = strFilter & "[" & cstrField & "] = '" & _
Forms!mnu_Kunden!lbxFilialenVerkn.ItemData(varElement) & "'"

Next

    strFilter = "Update tab_ex_Kunden " & "set [LFKDNR]= " & [strFilterSET] & " where " & strFilter
   
    Forms!mnu_Kunden!Infofeld.Caption = strFilter  'wird nur zu Testzwecken benutzt
    CurrentDb.Execute strFilter, dbFailOnError

End Sub

Den ermittelten Wert will ich meiner Variablen "strFilterSET" zuordnen,
also als "Ersatz" für "7676767".

Hat jemand eine Idee, kann mir hier bitte jemand weiterhelfen?
Kann man vielleicht die Schleife nach einem Durchlauf (nach dem ersten Wert) anhalten? Aber wie? Ich finde einfach keine Lösung, die funzt.

Mit besten Dank im Voraus
jagger

Acc 2016, W10

 
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1177
In ItemsSelected.Count, steht die Anzahl der ausgewählten Zeilen und in ItemsSelected.Item(Index) wird die Zeile des Listenfelds festgehalten, die an der Position vermerkt ist. Item ist die Standard-Eigenschaft von ItemsSelected und darf deshalb beim Adressieren ausgelassen werden. Auf dein Listenfeld bezogen, könntest Du so den ersten und letzten gewählten Eintrag ermitteln:   Dim selIdx As Long

   'mit dem Listenfeld: lbxFilialenVerkn
   With Me.lbxFilialenVerkn
   
      'wenn etwas ausgewählt wurde, ist Count größer 0
      If .ItemsSelected.Count > 0 Then
           
         'die Zählung von ItemsSelected.Count beginnt bei 0
         'die von ListIndex des Listenfelds auch
         
         '1. gewählter ListIndex
         selIdx = .ItemsSelected(0)
         
         'korrespondiernder ListIndex
         MsgBox "Zeile im Listenfeld: " & selIdx
         
         'Zeilenwert aus gebundener Spalte
         MsgBox "Erster: " & .ItemData(selIdx)
         
         'letzter gewählter ListIndex
         selIdx = .ItemsSelected(.ItemsSelected.Count - 1)
         
         'korrespondiernder  ListIndex
         MsgBox "Zeile im Listenfeld: " & selIdx
         
         'Zeilenwert aus gebundener Spalte
         MsgBox "Letzter: " & .ItemData(selIdx)
         
      End If
     
   End With
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: jagger

Offline jagger

  • Newbie
  • Beiträge: 42
Hey Lachtaube,

das sieht super aus. Kann ich gut einbauen.
Da wäre ich bestimmt auch selber drauf gekommen.
...so in 5 bis 6 Monaten oder Jahren!. :o

Nachmals vielen Dank!
LG
jagger
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1737
Mit intensivem Studium der Online-Hilfe (Steuerelement-Typ -> Eigenschaften und Methoden) kann sich diese Zeit auch drastisch verkürzen  ;)
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline jagger

  • Newbie
  • Beiträge: 42
@Beaker s.a.,
Du hast ja recht.
Ich habe den großen Gockel befragt und bin sicherlich auch öfter mal in der Online-Hilfe gelandet. Aber: Wald, Bäume... :-[

Zum Glück gibt es ja dieses Forum!
Vielleicht haben ja auch andere noch dieses Problem und finden jetzt hier im Forum die Lösung. So kann ja auch mal ein neues Mitglied hängen bleiben. ;-)

LG
jagger
 

Offline jagger

  • Newbie
  • Beiträge: 42
@Lachtaube,

eine beliebige Spalte (vom ersten oder letzten Wert) kann man so aber nicht ausgeben, oder?

LG
jagger
 

Offline DF6GL

  • Global Moderator
  • Access-Oberguru
  • *****
  • Beiträge: 23270
Hallo,


eine bestimmte Spalte  kann so "ausgegeben" werden:

dim x
x= Me!lbxFilialenVerkn.Column (2,selIdx)   '  dritte(!) Spalte des Listenfeldes..  <edit>

Offline jagger

  • Newbie
  • Beiträge: 42
Hallo DF6GL,

irgendwie klappt das so nicht.
Je nachdem welche Zeilen ausgewählt wurden, bringt er immer andere Werte.
Mal aus der ersten Spalte, mal aus der 4. oder 5. Manchmal auch Werte aus einer Zeile, die gar nicht aus gewählt wurde. Ich kann allerdings kein Schema erkennen.
Kann es sein, dass das bei Mehrfachauswahl nicht funktioniert?
 :-[

Dim strFilter As String, varElement As Variant
Dim strFilterSET As String
Dim KDSET As String
Dim stDocName As String
Const cstrField = "AGKDNR"
Dim intRow As Integer
Dim selIdx As Long

With Me.lbxFilialenVerkn 'mit dem Listenfeld: lbxFilialenVerk
  If .ItemsSelected.count > 0 Then 'wenn etwas ausgewählt wurde, ist Count größer 0
         'die Zählung von ItemsSelected.Count beginnt bei 0
         'die von ListIndex des Listenfelds auch
     
         '1. gewählter ListIndex
         selIdx = .ItemsSelected(0)
         
         'korrespondiernder ListIndex
         Rem MsgBox "Zeile im Listenfeld: " & selIdx
         
         'Zeilenwert aus gebundener Spalte
         Rem MsgBox "Erster: " & .ItemData(selIdx)
         
strFilterSET = .ItemData(selIdx)

   KDSET = Me!lbxFilialenVerkn.Column(selIdx, 2)
   MsgBox "Wert ist " & KDSET
   End If
     
End With

LG
jagger
 

Offline Lachtaube

  • Access Guru
  • ****
  • Beiträge: 1177
Die Spaltenposition - 1 muss das erste Argument sein, danach folgt die Zeile (selIdx). In Excel ist es genau umgekehrt - gut zu merken :) .
Grüße von der (⌒▽⌒)
 
Folgende Mitglieder bedankten sich: jagger

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1737
Hallo Jo,
Wenn ich nichts übersehen habe, dürfte dein Code kein unerwartetes
Ergebnis liefern, sondern immer den Wert, der im ersten, ausgewählten
Eintrag in der dritten Spalte steht.
Wenn du aus mehreren Einträgen einen Filter zusammensetzen willst,
musst du eine Schleife über die Auflistung .ItemsSelected laufen lassen
und den Filter Stück für Stück zusammensetzen, - Prinzip
strFilterSET = strFilterSET & neuer TeilFrage dich doch mal, wozu die übrigen Variablen deklariert werden, die
du gar nicht verwendest.
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline jagger

  • Newbie
  • Beiträge: 42
@Lachtaube,
das ist die Lösung! Es ist bei Access genau anders herum.
So funktioniert er super:

 
If .ItemsSelected.count > 0 Then
         selIdx = .ItemsSelected(0)       
strFilterSET = .ItemData(selIdx)
KDSET = Me!lbxFilialenVerkn.Column(2, selIdx)
MsgBox "Wert ist " & KDSET
End If
End With

Vielen Dank an alle Tippgeber!
LG
jagger
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1737
Re: Listenfeld mit Mehrfachauswahl ersten Wert von allen Markierten ermitteln
« Antwort #11 am: September 01, 2017, 14:23:46 »
Zitat
das ist die Lösung
die schon in #6 von Franz geposted wurde
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline jagger

  • Newbie
  • Beiträge: 42
Stimmt, nach der Änderung vom 01.09. ;)
 

Offline Beaker s.a.

  • Access Guru
  • ****
  • Beiträge: 1737
Stellt sich jedoch die Frage, warum du ein Listfeld mit Mehrfachauswahl
brauchst, wenn du dann nur eine Zeile für einen Filterausdruck verwendest.
Mit einer Einfachauswahl kannst du doch auf das ganze Item-Gewurschtel
verzichten
strFilterSET = .Value
KDSET = .Column(2)
gruss ekkehard
--
Beaker s.a., der lieber an seinem eigenen Projekt arbeiten würde/sollte, aber irgendwie immer gerne seinen Senf dazu gibt ;-)
S.M.I².L.E.
 

Offline jagger

  • Newbie
  • Beiträge: 42
Hallo Ekkehard,

es geht darum, Kundendaten (z.B. Kressner), die mehrere Filialen haben, zu verknüpfen.
Man gibt den Suchbegriff ein, im Listenfeld werden die Suchergebnisse angezeigt.
Dann markiert man im Listenfeld die Filialen, die zu dem Kunden gehören und klickt auf den Button "verknüpfen". Jetzt haben alle Datensätze die gleiche "AGFLNR" (so heisst das Feld). Über dieses Feld (läuft nur im Hintergrund mit) sind nun alle Standorte (Filialen) verknüpft. Jetzt kann man von jedem Datensatz des Kunden (pro Standort ein Datensatz) sich alle Filialen von diesem Kunden anzeigen lassen.
Das funktioniert super!

LG
jagger