Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1232to1236
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox mit Header

Listbox mit Header
braleta
Hallo Excel-ianer,
ich schlage mich mit einem Problem rum, das ich alleine nicht mehr lösen kann.
Ich habe eine Userform mit drei Rahmen:
Im ersten Rahmen befindet sich eine Listbox
Im zweiten Rahmen befinden sich 12 Textfelder
Im dritten Rahmen sind Aktions-Knöpfe
Die Listbox wird bei Initialize mit Daten gefüllt, und wird dann ein Eintrag ausgewählt (Click), werden die entsprechenden Daten mittels der Routine "Private Sub lstClickAndSelect_Click()" aus dem Worksheet in die Textfelder geschrieben.
Die Listbox wird so gefüllt:
With Me.lstClickAndSelect
.ColumnCount = 7
.ColumnWidths = "50;50;35;30;40;80;50"
.ColumnHeads = False
For i = ErsteZeile To LetzteZeile
    .AddItem Cells(i, "H") 'Nachname
    .List(.ListCount - 1, 1) = Cells(i, "I") 'Vorname
    .List(.ListCount - 1, 2) = Cells(i, "J") 'Gender
    .List(.ListCount - 1, 3) = Cells(i, "K") 'Band
    .List(.ListCount - 1, 4) = Cells(i, "L") 'PBC
    .List(.ListCount - 1, 5) = Cells(i, "M") 'Land
    .List(.ListCount - 1, 6) = Cells(i, "N") 'Activity
Next i
End With
Es funktioniert auch alles, ich kann mappen, ändern, zurückschreiben, refreshen, alles ist OK.
Wenn ich jedoch diesen Code nehme:
With Me.lstClickAndSelect
    .ColumnCount = 7
    .ColumnWidths = "50;50;35;30;40;80;50"
    .ColumnHeads = True
    .RowSource = Range("H" & ErsteZeile & ":N" & LetzteZeile).Address
End With
passiert Folgendes:
Die Listbox wird ganz normal gefüllt, der Header wird angezeigt.
Klicke ich eine Zeile in der Listbox an, werden die Daten richtig in die Textfelder geschrieben. Ich kann Inhalte der Textfelder ändern, aber wenn ich auf "OK" drücke, um die Textfelder wieder zurück in das Spreadsheet zu schreiben, wird - wenn ich Feldinhalte auf Richtigkeit überprüfe - die Routine "Private Sub lstClickAndSelect_Click()" angesprungen und die "Originaldaten aus demSpreadshhet werden wieder geladen, ohne dass ich meine eventuellen Änderungen zurückschreiben kann.
Meine Check-Snipplets sehen in etwa so aus:
'pruefe Gender
If Trim(UCase(txtGender)) = "M" Or Trim(UCase(txtGender)) = "F" Then
    txtGender = UCase(Trim(txtGender))    'schreibe die Textbox neu
    Cells(ActualIndex, "J") = txtGender       'schreibe die Textbox ins Blatt
Else
     MsgBox "Gender is ein Pflichtfeld und darf nur ""M"" oder ""F"" sein!"
     txtGender = ""
    txtGender.SetFocus
     Exit Sub
End If
Was passiert hier? Ich habe keine Events getriggert.
...braleta

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Listbox mit Header
02.10.2011 11:09:28
Tino
Hallo,
durch das schreiben in die Zelle wird dieses Event ausgelöst.
Vorschlag, Du kannst dies abfangen.
Bsp:

    txtGender.Tag = "1" 'Tag Eigenschaft nutzen
txtGender = UCase(Trim(txtGender))    'schreibe die Textbox neu
Cells(ActualIndex, "J") = txtGender       'schreibe die Textbox ins Blatt
txtGender.Tag = ""
In Deiner Listbox als erste Zeile nach der Deklarierung

If txtGender.Tag = "1" Then Exit Sub
Gruß Tino
AW: Listbox mit Header
02.10.2011 13:45:23
braleta
Hallo Tino,
danke für die Antwort, ich habe das "Tag" eingebaut, aber ich habe immer noch die gleichen Probleme.
Vorabinfo:
Die Listbox heißt "lstClickAndSelect"
Ich habe jetzt mal intensiv getestet und Folgendes festgestellt:
1. Die Funktion "lstClickAndSelect_Click" wird immer dann angesprungen, wenn ich den Inhalt eines der Textfelder, die ich über Initialize in die Listbox schreibe, zurück in das Spreadsheet schreibe (oder zurückgeschrieben habe?).
2. Die Funktion "lstClickAndSelect_Click" wird zwei mal hintereinander angesprungen und lädt mir natürlich wieder die Ursprungsdaten, die ich "eigentlich" geändert haben will. Die Felder, die ich nicht in die Listbox lade, sind upgedated, die anderen nicht...
Es sieht fast so aus, als ob .RowSource etwas damit zu tun haben könnte...
Hast Du noch einen Tipp?
...braleta
Anzeige
AW: Listbox mit Header
02.10.2011 14:03:26
Tino
Hallo,
lade mal ein Beispiel hoch.
Gruß Tino
AW: Listbox mit Header
02.10.2011 17:47:19
braleta
Hallo Tino,
sorry, dass es so lange gedauert hat, aber ich habe mir ein bas-Modul zerhauen und musste es gerade neu nachschreiben
ich lade eine Testdatei hoch. Sie heißt: https://www.herber.de/bbs/user/76837.xls

Achtung: die Userform wird über "Workbook_Open" gestartet, kann aber über das "Rote X" gelöscht werden, um in das VBA-Environment zu gelangen. "UserForm_QueryClose" habe ich disabled.
Aktiv ist im Moment das Laden der Listbox mit ".additem".
.RowSource ist direkt darunter auskommentiert...
Es wäre toll, wenn Du den Fehler findest.
...braleta
Anzeige
AW: Listbox mit Header
02.10.2011 16:38:06
Tino
Hallo,
hier mal ein Beispiel wie ich es machen würde.
Habe mal beide Varianten eingebaut, einmal mit Verwendung der Tag Eigenschaft und einmal ohne.
Persönlich würde ich die mit setzen der Tag- Eigenschaft verwenden,
dann wird der Code der Listbox nicht komplett durchlaufen, was man ja nicht braucht.
https://www.herber.de/bbs/user/76836.xls
Gruß Tino
Anzeige
Routinen morgen um und testAW: Listbox mit Header
02.10.2011 22:06:16
braleta
Tino,
danke, auf den ersten Blick sieht das wirklich toll aus, ich baue meine Routinen um und teste sie dann.
Ich melde mich auf alle Fälle!
braleta
AW: Listbox mit Header
03.10.2011 11:55:03
braleta
Tino,
noch ein Mal herzlichen Dank für die Beispiele, ich habe die Lösung mit dem "Tag" umgesetzt und es funktioniert natürlich einwandfrei.
Vielleicht wäre ich auch noch auf diese Lösung gekommen, weil ich die Zellen, deren Inhalt geändert wurde, einfärben will, und das kann ich ja nur über den "_Change"-Event.
Aber vielen Dank, Du warst mir eine große Hilfe!
...braleta

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige