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

Listbox ohne auswahl nicht weiterführen

Forumthread: Listbox ohne auswahl nicht weiterführen

Listbox ohne auswahl nicht weiterführen
28.03.2018 18:24:28
Benjamin
Huhu Oberschlumpf
du hattest mir in dem Beitrag
https://www.herber.de/cgi-bin/callthread.pl?index=1614644#1614644
geholfen und ich habe deinen Code oder zumindest den, den du mir gegeben hast benutzt. Ich kann leider auf meinem Beitrag keine weitere Antwort schreiben, deshalb mach ich das so.
Würdest du mit noch sagen, was ich machen kann, das wenn aus der Auswahlbox keine Auswahl getroffen wurde, das importieren nicht geht. Denn wenn ich den Import Button drücke aber keine Auswahl getätigt habe wird die Tabelle gelöscht.
Entweder sollte der Import Button erst verfügbar werden, wenn ich etwas ausgewählt habe, oder es geht einfach nicht weiter so oft man auch clickt, so lang nichts ausgewählt ist.
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox ohne auswahl nicht weiterführen
28.03.2018 18:33:41
Daniel
Hi
wenn deine Listbox vom Typ SingleSelect ist (nur eine Auswahl möglich), dann kommt diese Zeile an die erste Stelle im KlickEvent des Importbuttons:
If Listbox1.ListIndex = -1 then
Msgbox "Bitte Auswahl treffen"
Exit Sub
End if
hast du eine Multiselect-Listbox in der man mehrere Einträge anklicken kann, dann dieser Code am Anfang des ClickEvents des ImportButtons.
dim i as Long
For i = 0 to Listbox1.ListCount - 1
if Listbox1.Selected(i) then Exit for
Next
if i = Listbox1.ListCount Then
Msgbox "Bitte Auswahl treffen"
Exit Sub
End if
Gruß Daniel
Anzeige
AW: Listbox ohne auswahl nicht weiterführen
28.03.2018 18:44:28
Benjamin
Um es mal zu verdeutlichen und das man nicht raten muss, das hier ist der Code für den Import Button
Aus der Beispieldatei mit meinem Code zum importieren.
Private Sub cmdOK_Click()
Dim liIdx As Integer, wsAlt As Worksheet
For liIdx = 0 To lsbSheets.ListCount - 1
If lsbSheets.Selected(liIdx) = True Then
Set wsAlt = pwbAlt.Sheets(lsbSheets.List(liIdx, 0))
pwbNeu.Sheets("Orig").Copy Before:=pwbNeu.Sheets(pwbNeu.Sheets.Count) ' _
Tabellenblatt kopieren.
ActiveSheet.Name = pwbAlt.Sheets(lsbSheets.List(liIdx, 0)).Name ' Name aus alter  _
Datei setzen (auswahl).
'Importieren der alten Werte - START
With ActiveSheet
'stats - START
.Range("B2").Value = wsAlt.Range("B2").Value
.Range("E15").Value = wsAlt.Range("E15").Value
.Range("U3").Value = wsAlt.Range("U3").Value
.Range("AH3").Value = wsAlt.Range("AH3").Value
.Range("U7:U15").Value = wsAlt.Range("U7:U15").Value
.Range("AC7").Value = wsAlt.Range("AC7").Value
.Range("AD16").Value = wsAlt.Range("AD16").Value
'Stats - ENDE
'Rüstung - START
.Range("G21").Value = wsAlt.Range("G21").Value
.Range("L21").Value = wsAlt.Range("L21").Value
.Range("Q21").Value = wsAlt.Range("Q21").Value
.Range("V21").Value = wsAlt.Range("V21").Value
.Range("AA21").Value = wsAlt.Range("AA21").Value
.Range("AF21").Value = wsAlt.Range("AF21").Value
.Range("G23").Value = wsAlt.Range("G23").Value
.Range("L23").Value = wsAlt.Range("L23").Value
.Range("Q23").Value = wsAlt.Range("Q23").Value
.Range("V23").Value = wsAlt.Range("V23").Value
.Range("AA23").Value = wsAlt.Range("AA23").Value
.Range("AF23").Value = wsAlt.Range("AF23").Value
.Range("G25").Value = wsAlt.Range("G25").Value
.Range("L25").Value = wsAlt.Range("L25").Value
.Range("Q25").Value = wsAlt.Range("Q25").Value
.Range("V25").Value = wsAlt.Range("V25").Value
.Range("AA25").Value = wsAlt.Range("AA25").Value
.Range("AF25").Value = wsAlt.Range("AF25").Value
.Range("G22").Value = wsAlt.Range("G22").Value
.Range("J22").Value = wsAlt.Range("J22").Value
.Range("L22").Value = wsAlt.Range("L22").Value
.Range("O22").Value = wsAlt.Range("O22").Value
.Range("Q22").Value = wsAlt.Range("Q22").Value
.Range("T22").Value = wsAlt.Range("T22").Value
.Range("V22").Value = wsAlt.Range("V22").Value
.Range("Y22").Value = wsAlt.Range("Y22").Value
.Range("AA22").Value = wsAlt.Range("AA22").Value
.Range("AD22").Value = wsAlt.Range("AD22").Value
.Range("AF22").Value = wsAlt.Range("AF22").Value
.Range("AI22").Value = wsAlt.Range("AI22").Value
.Range("G24").Value = wsAlt.Range("G24").Value
.Range("J24").Value = wsAlt.Range("J24").Value
.Range("L24").Value = wsAlt.Range("L24").Value
.Range("O24").Value = wsAlt.Range("O24").Value
.Range("Q24").Value = wsAlt.Range("Q24").Value
.Range("T24").Value = wsAlt.Range("T24").Value
.Range("V24").Value = wsAlt.Range("V24").Value
.Range("Y24").Value = wsAlt.Range("Y24").Value
.Range("AA24").Value = wsAlt.Range("AA24").Value
.Range("AD24").Value = wsAlt.Range("AD24").Value
.Range("AF24").Value = wsAlt.Range("AF24").Value
.Range("AI24").Value = wsAlt.Range("AI24").Value
.Range("G26").Value = wsAlt.Range("G26").Value
.Range("J26").Value = wsAlt.Range("J26").Value
.Range("L26").Value = wsAlt.Range("L26").Value
.Range("O26").Value = wsAlt.Range("O26").Value
.Range("Q26").Value = wsAlt.Range("Q26").Value
.Range("T26").Value = wsAlt.Range("T26").Value
.Range("V26").Value = wsAlt.Range("V26").Value
.Range("Y26").Value = wsAlt.Range("Y26").Value
.Range("AA26").Value = wsAlt.Range("AA26").Value
.Range("AD26").Value = wsAlt.Range("AD26").Value
.Range("AF26").Value = wsAlt.Range("AF26").Value
.Range("AI26").Value = wsAlt.Range("AI26").Value
'Rüstung - ENDE
'Fertigkeiten - START
.Range("B29:B46").Value = wsAlt.Range("B29:B46").Value
.Range("M29:O46").Value = wsAlt.Range("M29:O46").Value
.Range("T29:T46").Value = wsAlt.Range("T29:T46").Value
.Range("AE29:AG46").Value = wsAlt.Range("AE29:AG46").Value
'Alte Zero G Version prüfen und korrigieren - START
.Range("B29:T46").Replace _
What:="Zero Gee", Replacement:="Zero G", _
SearchOrder:=xlByColumns, MatchCase:=False
'Alte Zero G Version prüfen und korrigieren - ENDE
'Fertigkeiten - ENDE
'Waffen - START
.Range("AE49").Value = wsAlt.Range("AE49").Value
.Range("B50:AE54").Value = wsAlt.Range("B50:AE54").Value
'Waffen - ENDE
'Ausrüstung - START
.Range("B57:K63").Value = wsAlt.Range("B57:K63").Value
.Range("N57:W63").Value = wsAlt.Range("N57:W63").Value
.Range("Z57:AI63").Value = wsAlt.Range("Z57:AI63").Value
'Ausrüstung - ENDE
'Lebensweg - START
.Range("B71:W71").Value = wsAlt.Range("B71:W71").Value
.Range("B74:W75").Value = wsAlt.Range("B74:W75").Value
.Range("B78:W79").Value = wsAlt.Range("B78:W79").Value
.Range("B81:E82").Value = wsAlt.Range("B81:E82").Value
.Range("B85:E86").Value = wsAlt.Range("B85:E86").Value
.Range("B89:E90").Value = wsAlt.Range("B89:E90").Value
.Range("B93:E94").Value = wsAlt.Range("B93:E94").Value
.Range("AC82:AC88").Value = wsAlt.Range("AC82:AC88").Value
.Range("T89:AC99").Value = wsAlt.Range("T89:AC99").Value
.Range("B98:G104").Value = wsAlt.Range("B98:G104").Value
.Range("B108:K113").Value = wsAlt.Range("B108:K113").Value
.Range("L116:L117").Value = wsAlt.Range("L116:L117").Value
.Range("B118:B119").Value = wsAlt.Range("B118:B119").Value
.Range("L120:L121").Value = wsAlt.Range("L120:L121").Value
.Range("B122:B123").Value = wsAlt.Range("B122:B123").Value
.Range("T102:T127").Value = wsAlt.Range("T102:T127").Value
.Range("B126:E127").Value = wsAlt.Range("B126:E127").Value
'Lebensweg - ENDE
End With
'Importieren der alten Werte - ENDE
lsbSheets.Selected(liIdx) = False
End If
Next
Application.DisplayAlerts = False
pwbNeu.Sheets("Orig").Delete
Application.DisplayAlerts = True
Unload ufSheets
MsgBox "Importierung erfolgreich abgeschlossen."
End Sub

Anzeige
AW: Listbox ohne auswahl nicht weiterführen
28.03.2018 19:34:15
Daniel
du hast auf meinen Beitrag geantwortet, hast du ihn auch gelesen?
Gruß Daniel
AW: Listbox ohne auswahl nicht weiterführen
28.03.2018 19:42:49
Benjamin
Ja das habe ich, jedoch sind halt meine Kentnisse nicht so sonderlich toll, als das ich den Code nun so ändere das es klappt. Meine Versuche diesen in den Code von Oberschlumpf einzubauen bzw. zu ändern. Haben nicht zum Erfolg geführt. Bekomme immer Debug Fehler.
Anzeige
AW: Listbox ohne auswahl nicht weiterführen
28.03.2018 19:49:17
Benjamin
*hust und Kopf auf Tisch hau* ohman verzeihung
ich habe total vergessen die Listbox1.ListCount auf den Namen anzupassen. Die bezeichnung ist ja eine andere. Tut mir leid. Es geht nun.
Vielen dank dir.
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox in Excel: Auswahl validieren und Import verhindern


Schritt-für-Schritt-Anleitung

Um sicherzustellen, dass ein Import nur durchgeführt wird, wenn eine Auswahl in der Listbox getroffen wurde, kannst du folgenden VBA-Code in das Click-Ereignis des Import-Buttons einfügen.

  1. Öffne den VBA-Editor mit ALT + F11.

  2. Suche dein UserForm, das die Listbox und den Import-Button enthält.

  3. Füge diesen Code in das Click-Ereignis des Import-Buttons ein:

    Private Sub cmdOK_Click()
       Dim liIdx As Integer, wsAlt As Worksheet
    
       ' Überprüfen, ob eine Auswahl getroffen wurde
       If lsbSheets.ListCount = 0 Or lsbSheets.ListIndex = -1 Then
           MsgBox "Bitte Auswahl treffen"
           Exit Sub
       End If
    
       For liIdx = 0 To lsbSheets.ListCount - 1
           If lsbSheets.Selected(liIdx) Then
               Set wsAlt = pwbAlt.Sheets(lsbSheets.List(liIdx, 0))
               ' Hier folgt der Import-Code
           End If
       Next
    End Sub
  4. Stelle sicher, dass die Listbox richtig benannt ist, um Fehler zu vermeiden.


Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“

    • Überprüfe den Listbox-Namen in deinem Code. Er muss exakt dem Namen im UserForm entsprechen.
  • Fehler: „Index außerhalb des Bereichs“

    • Stelle sicher, dass die Listbox tatsächlich Einträge enthält, bevor du versuchst, auf sie zuzugreifen.
  • Fehler bei der Auswahlvalidierung

    • Der Code überprüft nur, ob die Auswahl gültig ist. Achte darauf, dass ListIndex korrekt verwendet wird, insbesondere bei Multi-Select-Listboxen.

Alternative Methoden

Falls du keine VBA-Programmierung verwenden möchtest, kannst du auch Datenvalidierung in Excel nutzen, um sicherzustellen, dass der Benutzer eine Auswahl trifft, bevor er fortfahren kann:

  1. Wähle die Zelle, in die das Ergebnis der Listbox ausgewählt werden soll.
  2. Gehe zu Daten > Datenüberprüfung.
  3. Wähle Liste als zulässigen Typ und gib die Quelle für die Liste an.
  4. Setze die Meldung für ungültige Daten, um den Benutzer zu informieren.

Praktische Beispiele

Hier ein einfaches Beispiel für einen Importprozess mit einer SingleSelect-Listbox:

Private Sub cmdOK_Click()
    If Listbox1.ListIndex = -1 Then
        MsgBox "Bitte Auswahl treffen"
        Exit Sub
    End If

    ' Hier folgt der Import-Logik...
End Sub

Für eine MultiSelect-Listbox könntest du den Code wie folgt anpassen:

Dim i As Long
For i = 0 To Listbox1.ListCount - 1
    If Listbox1.Selected(i) Then Exit For
Next
If i = Listbox1.ListCount Then
    MsgBox "Bitte Auswahl treffen"
    Exit Sub
End If

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Tippfehler in Variablen zu vermeiden.
  • Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um potenzielle Fehler besser zu handhaben.
  • Testen: Führe häufig Tests durch, um sicherzustellen, dass der Code in verschiedenen Szenarien funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich die Listbox initialisieren? Du kannst die Listbox beim Laden des UserForms mit Daten füllen, indem du im UserForm_Initialize()-Ereignis den Code zur Befüllung einfügst.

2. Was ist der Unterschied zwischen SingleSelect und MultiSelect? SingleSelect erlaubt nur eine Auswahl, während MultiSelect es dem Benutzer ermöglicht, mehrere Einträge auszuwählen.

3. Warum funktioniert mein Code nicht, obwohl ich alles überprüft habe? Achte darauf, dass alle Namen korrekt sind und dass der Code im richtigen Kontext ausgeführt wird. Debugging kann helfen, den genauen Fehler zu finden.

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