Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Listindex auslesen

Listindex auslesen
08.08.2019 13:00:18
Jens
Hallo
weis jemand wie man den Listindex auslist von einer Auswahlliste die über die Datenprüfung in einer Zelle erstellt wurde?
Sprich mal wählt den zweiten Eintrag aus und in einer Anderen zelle steht dann die Zahl 2.
Wie geht das?

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C6" Then  '
bei dem Code bekomme ich die fehlermeldung.
die Methode Range ist fehlgeschlagen
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listindex auslesen
08.08.2019 13:16:08
Mullit
Hallo,
wenn Deine Quelldaten auf einem externen Blatt liegen, mußt Du das mit angeben:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Address(0, 0) = "C6" Then  '<== Gültigkeitszelle
      MsgBox Application.Match(Target.Value, Sheet3.Range(Mid$(String:=Target.Validation.Formula1, Start:=2)), 0)
   End If
End Sub

Gruß, Mullit
Anzeige
AW: Listindex auslesen
08.08.2019 14:09:19
Jens
nein es liebt alles auf dem selben Blatt.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C6" Then  '
so geht es auch nicht.
Warum?
AW: Listindex auslesen
08.08.2019 14:35:39
Daniel
HI
also bei mir funktioniert dein Code.
das Sheet brauchst du nicht angeben. Bei Range kann man das Tabellenblatt auch zusammen mit der Zelladresse angeben, dh Range("'Tabelle 2'!A1") funktioniert! und das Fehlen ist nicht die Ursachen
lade bitte mal die Datei hoch, das muss man sich genauer anschauen.
vielleicht hast du ja auch den Blattschutz aktiv und kannst deswegen nichts in die Zelle schreiben.
außerdem würde ich hier nicht mit dem ChangeEvent arbeiten, sondern mir das ganze als Funktion erstellen.
dh folgenden Code in ein allgemeines Modul:
Function Validation_Index(Zelle As Range) As Variant
With Zelle.Validation
If .Type  xlValidateList Then
Validation_Index = "#NoValidationList"
ElseIf Zelle.Value = "" Then
Validation_Index = ""
ElseIf .Formula1 Like "=*" Then
Validation_Index = Application.Match(Zelle.Value, Range(Mid(.Formula1, 2)), 0)
Else
Validation_Index = Application.Match(CStr(Zelle.Value), Split(.Formula1, ";"), 0)
End If
End With
End Function
und dann in Zelle B2 die Formel
=Validation_Index(C6)
die Funktion habe ich so geschrieben, dass sowohl Zellbezüge als auch direkt eingegebene Werte verarbeiten kann.
Gruß Daniel
Anzeige
AW: Listindex auslesen
08.08.2019 15:06:08
Jens
Besten Dank.
Ich will den Index in code holen und nicht in das Tabellenblatt.
die Ausgabe in das Blatt habe ich nur gemacht, damit ich sehe was passiert.
hier meine Datei
https://www.herber.de/bbs/user/131332.xlsm
habe es mal vereinfacht.
Wobei nun garnichts mehr geht.
Ist mir alles ein Rätsel
Anzeige
AW: Listindex auslesen
08.08.2019 15:09:53
Jens
oder kann man den Wert deine Funktion einfach in eine Variable schreiben, die ich dann verwenden kann. Das wäre das beste.
AW: Listindex auslesen
08.08.2019 15:16:35
Daniel
Hi
naja, MITDENKEN ist beim Programmieren hilfreich.
wenn du die Werte für die Validation-List nicht über einen Zellbereich definierst sondern über die direkte Werteingabe, dann kann auch nicht mit RANGE auf einen Zellbereich zugreifen.
schau dir trotzdem mal meine Funktion an, da sind beide Möglichkeiten für die Definition der Auswahlliste vorgesehen, da siehst du wie du in diesem Fall vorgehen musst.
Btw, du kannst meine Function in einem Makro einsetzen.
Gruß Daniel
Anzeige
AW: Listindex auslesen
08.08.2019 15:32:03
Jens
hallo,
wenn ich den Code in eine andere Datei geben dann funktioniert er.
Wenn ich ihn in meiner Datei einbaue dann kommt der Fehler.
Weist du warum?
noch was. Später soll es so sein, dass der Werte der Liste zugegeben wird und in einer Variabeln in VBA steht.
Aber der BEreich indem diese Abfrage der daten Erfolgt ist begrenzt.
in Spalte B ab Zeile 3 bis zum letzten Wert der Zeile.
Wenn dann eine Zelle des BEreiches aktiviert wird, dann lest er von dieser zelle den entsprechenden Index der Auswahlliste aus.
https://www.herber.de/bbs/user/131334.xlsm
Kannst du mir hierzu noch helfen?
Anzeige
AW: Listindex auslesen
08.08.2019 15:47:05
Daniel
Hi
verwende den RICHTIGEN Tabellenblattnamen!
also den, auf dem die Tabelle für die Gültigkeitsliste liegt und das ist in deinem Fall "TD".
meine Anmerkung, dass du den vor dem Range nicht brauchst, gilt nur für den Fall, dass der Code in einem allgemeinen Modul liegt.
Liegt der Code jedoch in einem Tabellenblattmodul, musst du ihn vor dem Range hinschreiben, weil ansonsten das Tabellenblatt des Moduls angenommen wird.
Gruß Daniel
Anzeige
AW: Listindex auslesen
08.08.2019 15:55:08
Jens
Danke.
so gehts

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(0, 0) = "C6" Then  '
Kann man das Target noch so anpassen das ich darauf einfluss nehmen kann?
hätte es noch so versucht

Private Sub Worksheet_Change(ByVal Target As Range)
Worksheets("Aufstellung").Cells(2, 2) = Application.Match(Worksheets("Aufstellung").Cells( _
3, 3).Value, Worksheets("TD").Range(Mid$(String:=Worksheets("Aufstellung").Cells(3, 3).Validation.Formula1, Start:=2)), 0)
End Sub

es tut sich nichts. nicht mal ein Fehler.
Anzeige
AW: Listindex auslesen
09.08.2019 09:48:39
Daniel
kommt darauf an, was du vor hast.
Gruß Daniel
;
Anzeige
Anzeige

Infobox / Tutorial

Listindex auslesen in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Listindex einer Auswahlliste in Excel VBA auszulesen, folge diesen Schritten:

  1. Datenvalidierung einrichten: Stelle sicher, dass du in der Zelle C6 eine Dropdown-Liste mit Datenvalidierung hast.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)", wähle "Einfügen" und dann "Modul".

  4. Code einfügen: Füge den folgenden Code in das Modul ein:

    Function Validation_Index(Zelle As Range) As Variant
        With Zelle.Validation
            If .Type <> xlValidateList Then
                Validation_Index = "#NoValidationList"
            ElseIf Zelle.Value = "" Then
                Validation_Index = ""
            ElseIf .Formula1 Like "=*" Then
                Validation_Index = Application.Match(Zelle.Value, Range(Mid(.Formula1, 2)), 0)
            Else
                Validation_Index = Application.Match(CStr(Zelle.Value), Split(.Formula1, ";"), 0)
            End If
        End With
    End Function
  5. Formel anwenden: Gehe zurück zu deinem Arbeitsblatt und gib in Zelle B2 die Formel =Validation_Index(C6) ein.

  6. Testen: Wähle einen Wert aus der Dropdown-Liste in C6 und schaue dir das Ergebnis in B2 an.


Häufige Fehler und Lösungen

  1. Fehlermeldung "Methode Range ist fehlgeschlagen":

    • Stelle sicher, dass der Code im richtigen Modul ist. Wenn er im Arbeitsblattmodul steht, muss der Tabellenblattname in den Range-Anweisungen korrekt angegeben werden.
  2. Dropdown funktionierte nicht:

    • Überprüfe, ob die Datenvalidierung korrekt eingerichtet ist und dass die Quelle für die Liste übereinstimmt.
  3. Index wird nicht angezeigt:

    • Prüfe, ob der Wert in Zelle C6 tatsächlich in der Liste vorhanden ist. Andernfalls wird kein Index zurückgegeben.

Alternative Methoden

Anstelle der Worksheet_Change-Ereignisprozedur kannst du auch die Funktion Validation_Index direkt in deinen VBA-Codes verwenden, um den listindex zu ermitteln. Dies ermöglicht dir eine flexiblere Handhabung der Ergebnisse, indem du sie in Variablen speichern kannst:

Dim index As Variant
index = Validation_Index(Range("C6"))

Praktische Beispiele

Hier sind einige praktische Anwendungen des listindex in VBA:

  1. Wert in eine Variable speichern:

    Dim myIndex As Variant
    myIndex = Validation_Index(Range("C6"))
    MsgBox "Der Listindex ist: " & myIndex
  2. Verwendung in einer Schleife:

    For i = 1 To 10
        If Validation_Index(Range("C" & i)) <> "#NoValidationList" Then
            ' Hier kannst du den Index weiterverarbeiten
        End If
    Next i

Tipps für Profis

  • Verwende Option Explicit: Dies hilft dir, Fehler zu vermeiden, indem du sicherstellst, dass alle Variablen deklariert sind.
  • Tabellenblattnamen korrekt angeben: Achte darauf, den richtigen Namen des Tabellenblattes zu verwenden, um Fehler zu vermeiden.
  • Debugging: Verwende Debug.Print in deinem Code, um Variablenwerte während der Ausführung zu überwachen.

FAQ: Häufige Fragen

1. Wie kann ich den Listindex in einer ListBox verwenden?
Du kannst die ListIndex-Eigenschaft der ListBox verwenden, um den aktuell ausgewählten Index zu ermitteln:

Dim selectedIndex As Integer
selectedIndex = Me.ListBox1.ListIndex

2. Was passiert, wenn der Wert nicht in der Liste vorhanden ist?
In diesem Fall gibt die Funktion Validation_Index den Wert #N/A zurück. Du kannst dies in deinem Code abfangen und entsprechende Maßnahmen ergreifen.

3. Ist es möglich, den Listindex dynamisch zu ändern?
Ja, du kannst den Listindex ändern, indem du die ListIndex-Eigenschaft der ListBox oder ComboBox in deinem VBA-Code anpasst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige