Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Markierter Wert aus Listbox in aktive Zelle

Forumthread: VBA: Markierter Wert aus Listbox in aktive Zelle

VBA: Markierter Wert aus Listbox in aktive Zelle
30.09.2003 16:03:24
Moritz
Hallo,

folgende Fragestellung: Eine 3-spaltige Originalliste wird laufend um neue Projekte erweitert. Auf einem weiteren Arbeitsblatt erscheinen die Projekte in Spalte A verkettet. Nun sollen die Projekte über eine Auswahlliste, sortiert und ohne Leerzeilen dargestellt werden. Klappt mittles der untenstehenden Formel tadellos.

Weiter soll der markierte Wert per Klick auf den Button 'OK' in die aktive Zelle des Arbeitsblatts übertragen werden. Das dazugehörige Formular (ListBoxSort) besteht aus einer ListBox und einem OK Button. Hier komme ich nicht weiter! Was müßte man dem OK Button formeltechnisch mitteilen, um den jeweils markierten Wert per Klick in die jeweils aktive Zelle auf dem Arbeitsblatt übertragen zu können?


Sub ShowTheForm()
ListboxSort.Show
End Sub

-----

Sub SortAndRemoveDupes()
Dim rListSort As Range, rOldList As Range
Dim strRowSource As String
'Clears Hidden sheet Column A ready for list
Sheet1.Range("A1", Sheet1.Range("A65536").End(xlUp)).Clear
'Sets range variable to list we want
Set rOldList = Sheet2.Range("A1", Sheet2.Range("A65536").End(xlUp))
'Uses AdvancedFilter to copy the list to Column A _
of the hidden sheet and remove all dupes
rOldList.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Sheet1.Cells(1, 1), Unique:=True
'Sets range variable to the new non dupe list
Set rListSort = Sheet1.Range("A1", Sheet1.Range("A65536").End(xlUp))
With rListSort
'Sorts the new non dupe list
.Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
'Parses the address of the sorted unique items
strRowSource = Sheet1.Name & "!" & Sheet1.Range _
("A2", Sheet1.Range("A65536").End(xlUp)).Address
Sheet1.Range("A1") = "akanto -- Neu sortierte Projektbudgetliste"
With ListboxSort.ListBox1
'Clears old ListBox RowSource
.RowSource = vbNullString
'Parses new one
.RowSource = strRowSource
End With
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Markierter Wert aus Listbox in aktive Zelle
30.09.2003 21:10:20
ChrisL
Hallo Moritz

Bin da ehrlich gesagt etwas durcheinander, aber ich interpretiere das Problem jetzt einfach mal wie folgt:

Du möchtest aus einer 3-spaltigen Listbox den markierten Wert in die aktive Zelle übernehmen, Fokus also auf 3-spaltig. Dabei scheint mir dein bestehendes Makro aber lediglich auf eine Spalte zu deuten... jedenfalls etwa wie folgt

ActiveCell = ListBox1.Column(0) & ListBox1.Column(1) & ListBox1.Column(2)

Wenn es doch eine einspaltige ListBox ist, dann so...

ActiveCell = ListBox1

Wenn das Problem ein anderes ist z.B. Multi-Select, dann kannst du dich ja nochmals melden oder besser mal in der Recherche gucken.

In deinem Code - vorausgesetzt, dass das Blatt überhaupt sichtbar ist - würde sich übrigens ein...

Application.ScreenUpdating = False
' Dein Code
Application.ScreenUpdating = True

... nicht schlecht machen.

Gruss
Chris
Anzeige
Anzeige

Infobox / Tutorial

Markierten Wert aus Listbox in aktive Zelle übertragen


Schritt-für-Schritt-Anleitung

  1. Erstelle ein UserForm: Öffne den VBA-Editor (Alt + F11), füge ein neues UserForm hinzu und nenne es ListboxSort.
  2. Füge eine ListBox hinzu: Platziere eine ListBox (ListBox1) und einen Button (btnOK) auf dem UserForm.
  3. Erstelle das Makro ShowTheForm: Füge den folgenden Code in ein Modul ein, um das UserForm anzuzeigen:
    Sub ShowTheForm()
       ListboxSort.Show
    End Sub
  4. Fülle die ListBox: Verwende das folgende Makro, um die ListBox mit Werten zu füllen:
    Sub SortAndRemoveDupes()
       Dim rListSort As Range, rOldList As Range
       Dim strRowSource As String
       Sheet1.Range("A1", Sheet1.Range("A65536").End(xlUp)).Clear
       Set rOldList = Sheet2.Range("A1", Sheet2.Range("A65536").End(xlUp))
       rOldList.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Sheet1.Cells(1, 1), Unique:=True
       Set rListSort = Sheet1.Range("A1", Sheet1.Range("A65536").End(xlUp))
       rListSort.Sort Key1:=.Cells(2, 1), Order1:=xlAscending, Header:=xlYes
       strRowSource = Sheet1.Name & "!" & Sheet1.Range("A2", Sheet1.Range("A65536").End(xlUp)).Address
       With ListboxSort.ListBox1
           .RowSource = strRowSource
       End With
    End Sub
  5. Werte in die aktive Zelle übertragen: Füge im btnOK_Click-Ereignis den folgenden Code hinzu, um den markierten Wert in die aktive Zelle zu übertragen:
    Private Sub btnOK_Click()
       ActiveCell.Value = ListBox1.Value
       Unload Me
    End Sub

Häufige Fehler und Lösungen

  • Fehler: ListBox zeigt keine Werte an
    Lösung: Stelle sicher, dass die RowSource der ListBox korrekt gesetzt ist und dass die Daten im Arbeitsblatt vorhanden sind.

  • Fehler: Aktive Zelle wird nicht aktualisiert
    Lösung: Überprüfe, ob das UserForm sichtbar ist, wenn der Button gedrückt wird. Stelle sicher, dass der Code im btnOK_Click-Ereignis korrekt ist.

  • Fehler: Mehrere Spalten werden nicht übernommen
    Lösung: Wenn du mehrere Spalten in der ListBox hast, verwende diesen Code:

    ActiveCell.Value = ListBox1.Column(0) & ListBox1.Column(1) & ListBox1.Column(2)

Alternative Methoden

  • Direktes Arbeiten mit Zellen: Du kannst auch direkt in den Zellen arbeiten, ohne ein UserForm zu verwenden. Dies wäre nützlich, wenn du keine ListBox benötigst.
  • Verwendung von Dropdown-Listen: Anstelle einer ListBox kannst du auch eine Datenvalidierung nutzen, um eine Dropdown-Liste zu erstellen.

Praktische Beispiele

  • Beispiel für die Nutzung der ListBox: Wenn du eine Liste von Projektbudgets hast, kannst du diese in der ListBox anzeigen und den Nutzer auswählen lassen, welches Budget er in die aktive Zelle einfügen möchte.
  • Mehrspaltige Auswahl: Wenn du mehrere Informationen (z.B. Projektname, Budget, Deadline) in der ListBox anzeigen möchtest, kannst du die Werte wie folgt zusammenfassen:
    ActiveCell.Value = ListBox1.Column(0) & " - " & ListBox1.Column(1)

Tipps für Profis

  • ScreenUpdating deaktivieren: Um die Leistung zu verbessern, kannst du Application.ScreenUpdating = False zu Beginn deines Makros hinzufügen und am Ende wieder auf True setzen.
  • Benutzerfreundlichkeit erhöhen: Füge Tooltips hinzu oder beschrifte deine Steuerelemente klar, damit die Benutzer wissen, was sie tun müssen.
  • Fehlermeldungen implementieren: Baue einfache Fehlerbehandlungen ein, um Nutzern hilfreiche Hinweise zu geben, wenn etwas schiefgeht.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass meine ListBox immer aktuell ist?
Du kannst das Makro SortAndRemoveDupes jedes Mal aufrufen, wenn du das UserForm öffnest.

2. Kann ich mehrere Werte gleichzeitig aus der ListBox auswählen?
Ja, du kannst die Multi-Select-Eigenschaft der ListBox aktivieren, um mehrere Auswahlmöglichkeiten zu ermöglichen. Verwende dann eine Schleife, um die Werte zu übertragen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige