Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen

ListBox RemoveItem


Betrifft: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 12:12:15

Hallo zusammen,

noch eine weitere Frage zu RemoveItem.

Ich habe die Auswahl aus einer ListBox3 in eine andere ListBox5 übertragen,
wenn ich das Formular schließe und erneut aufmache, sollen die bereits ausgewählten Werte nicht mehr in der ListBox3 erscheinen.

Dazu habe ich folgenden Code geschrieben:
(ArrAuswahl enthält die bereits ausgewählten Werte.)

Sheets("Meldg").Activate
ReDim ArrMeldg(1 To AnzMeldg, 1 To 5)
For n1 = 1 To AnzMeldg
ArrMeldg(n1, 1) = Range("Meldg.Start").Offset(n1, MeldgNMCol).Value
ArrMeldg(n1, 2) = Range("Meldg.Start").Offset(n1, MeldgSXCol).Value
ArrMeldg(n1, 3) = Range("Meldg.Start").Offset(n1, MeldgSKCol).Value
ArrMeldg(n1, 4) = Range("Meldg.Start").Offset(n1, MeldgAKCol).Value
ArrMeldg(n1, 5) = Range("Meldg.Start").Offset(n1, MeldgTRCol).Value
Next n1
If AnzAuswahl größer 0 Then
For n2 = 1 To AnzAuswahl
SuchText = ArrAuswahl(n2)
For n1 = 1 To AnzMeldg
If Range("Meldg.Start").Offset(n1, MeldgNMCol).Value = SuchText Then
With ListBox3
ListBox3.RemoveItem (n1)
End With
End If
Next n1
Next n2
End If

Dabei erhalte ich eine Fehlermeldung.
Wie muss der Code geändert werden?

Gruß
Siegfried

  

Betrifft: AW: ListBox RemoveItem von: yummi
Geschrieben am: 17.07.2017 12:17:54

hallo Siegfried,

listbox zählen von 0 an, du musst also n1-1 bei removeItem nehmen, dann sollte es gehen

Gruß
yummi


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 12:24:07

Hi Yummi,

hab ich versucht, klappt aber nicht.

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: yummi
Geschrieben am: 17.07.2017 12:26:13

Hallo Siegfried,
wenn du einzeln durchstepst im debugger, wo bekommst Du denn genau die Fehlermeldung?

Gruß
yummi


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 12:35:00

Hi Yummi,

ich habe den Code in die Initialize Anweisung geschrieben.
Die Fehlermeldung erhalte ich schon beim Aufruf der UserForm.Show, so komme ich gar nicht erst in den betroffenen Code.
Wenn ich Deinen ersten Hinweis umsetze, lautet die Fehlermeldung:
"Index außerhalb des gültigen Bereichs"

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: yummi
Geschrieben am: 17.07.2017 12:37:57

Hallo Siegfried,

setz mal den break point bei Userform1.show und step dann mit F8 weiter, bis die Fehlermeldung kommt

Gruß
yummi


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 12:47:15

Hi Yummi,

Danke für Deine Bemühung,
ich habe in der Zwischenzeit statt RemoveItem in die fragliche Zeile einen Ersatzeintrag "./." vorgenommen.
So klappt es wie gewünscht.

Aber ich werde trotzdem Deinen Hinweis aufnehmen.

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: Nepumuk
Geschrieben am: 17.07.2017 12:54:45

Hallo Siegfried,

wähle im VBA-Editor - Extras - Optionen - Allgemein - Unterbrechen bei Fehlern - die Option "In Klassenmodul". Damit kommst du im Fehlerfall immer an die richtige Zeile.

Gruß
Nepumuk


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 12:59:46

Hi Nepumuk,

auch Dir Danke,
Dein Hinweis ist bestimmt für künftige Fälle wichtig.

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 13:07:02

Hi Nepumuk,

auch wenn ich eine Lösung gefunden habe, ist sie ja nur ersatzweise zu akzeptieren.
Eleganter wäre schon die RemoveItem-Methode.

Nach der Umsetzung Deines Hinweises erhalte ich den Fehler in der Zeile:

ListBox3.RemoveItem (n1)

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: yummi
Geschrieben am: 17.07.2017 13:14:35

Hallo Siegried,

welchen Wert hat denn n1 und wieviel Elemente hast du in Listbox3?
lass dir mal mit debug.print Listbox3.listcount an der Stelle ausgeben.

Da scheint es eine Diskrepanz zu geben

Gruß
yummi


  

Betrifft: AW: ListBox RemoveItem von: Nepumuk
Geschrieben am: 17.07.2017 13:29:34

Hallo Siegfried,

welcher Fehlertext und welche Fehlernummer wird angezeigt?

Gruß
Nepumuk


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 13:59:44

Hi Nepumuk,

Laufzeitfehler '-2147024809(80070057)':
Ungültiges Argument

Hi Yummi,

ListBox3 enthält 16 Elemente
n1 entspricht der jeweiligen Position (Zeile) von SuchText

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: yummi
Geschrieben am: 17.07.2017 14:03:56

Hallo Siegfried,

welchen Wert hat n1? evtl Größer gleich 16?

Gruß
yummi


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 14:10:53

Hi Yummi,

n1 hat maximal 16 = AnzMeldg

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: yummi
Geschrieben am: 17.07.2017 14:22:55

Hallo Siegfried,

das ist genau das, was ich gesagt habe:

Die Listbox geht von 0-15 ( 16 Elemente) und wenn du an die 16. Stelle schreiben oder löschen willst, dann bist du ausserhalb des Bereichs, also kein Speicher da, deswegen der crash.
Kannst Du auch sehr gut sehen, wenn du dir die Variable der Listbox in das Überwachungsfenster ziehst und aufklappst.

Gruß
yummi


  

Betrifft: AW: ListBox RemoveItem von: Siegfried
Geschrieben am: 17.07.2017 14:33:54

Hi Yummi,

egal wie ich schreibe
For n1 = 1 To AnzMeldg
oder
For n1 = 0 To AnzMeldg - 1

in beiden Fällen erhalte ich die Fehlermeldung Ungültiges Argument

Gruß
Siegfried


  

Betrifft: AW: ListBox RemoveItem von: Nepumuk
Geschrieben am: 17.07.2017 14:40:57

Hallo Siegfried,

wenn du den 1. Eintrag löschst (Index 0) dann hat rutscht der 16. Eintrag auf Stelle 15 und hat daher den Index 14. Jetzt klarer? Du musst also von unten nach oben löschen und daher die Schleife rückwärts laufen lassen (Step -1).

Gruß
Nepumuk


Beiträge aus den Excel-Beispielen zum Thema "ListBox RemoveItem"