VBA-Anfänger: Userform-Einträge je nach Eingabe sortieren

21/04/2010 - 11:14 von Detlef Rehn | Report spam
Hallo Newsgroup,

unter Excel 2003 erfasse ich per Userform Schülerdaten. Über ein Textfeld
wird der Name eingegeben, über verschiedene Comboboxen die Klasse und die
gewàhlten Fàcher. Bisher wird mir jeder neue Schüler immer an das Ende der
Liste gesetzt. Ist es möglich, per VBA die Schüler je nach eingegebener
Klassenstufe in unterschiedliche Bereiche einsortieren zu lassen? So ist zum
Beispiel für die Klasse 9a der Bereich C10 bis C21 vorgesehen, darüber steht
in C9 die Klassenbezeichnung "9a". In C25 steht "9b", der zugehörige Bereich
wàre C26 bis c37 usw.

Bisher habe ich die Datensàtze immer so erfasst und einer Liste angefügt:


Private Sub UserForm_Activate()

'Beim Aufruf der Maske Comboboxen mit den Vorgabewerten füllen,
'die im Tabellenblatt "Vorgabewerte" in Spalte A (...) ab Zeile 2 stehen
With ThisWorkbook.Sheets("Vorgabewerte")

'Klassenstufe auswàhlen
cboKlasse.RowSource = Range(.Cells(2, 1), .Cells(.Cells(Rows.Count,
1).End(xlUp).Row, 1)).Address(External:=True)


[... weitere Textfelder und Comboboxen]

End With

End Sub

Private Sub cmdUebernehmen_click()
Dim letzteZeile As Integer

'letzte Zeile bestimmen
Range("A65536").End(xlUp).Select
'und eins draufaddieren, damit man die erste freie Zeile bekommt
letzteZeile = ActiveCell.Row + 1

'Werte schreiben
ThisWorkbook.Sheets("Tabelle1").Cells(letzteZeile, 1) = txtName.Value
ThisWorkbook.Sheets("Tabelle1").Cells(letzteZeile, 2) = cboKlasse.Value
ThisWorkbook.Sheets("Tabelle1").Cells(letzteZeile, 3) =
cboEinrichtung.Value
ThisWorkbook.Sheets("Tabelle1").Cells(letzteZeile, 4) = cboFB2.Value
ThisWorkbook.Sheets("Tabelle1").Cells(letzteZeile, 5) = cboFB3.Value
ThisWorkbook.Sheets("Tabelle1").Cells(letzteZeile, 6) = cboFB4.Value

'Maske schließen und Werte leeren
Unload Me
End Sub


Gibt es für meinen Wunsch eine gangbare Lösung oder sollte ich die
eingebenen Datensàtze besser erst im Anschluss sortieren?

Gruß, Detlef Rehn
 

Lesen sie die antworten

#1 Andreas Killer
21/04/2010 - 12:12 | Warnen spam
On 21 Apr., 11:14, "Detlef Rehn" wrote:

Gibt es für meinen Wunsch eine gangbare Lösung oder sollte ich die
eingebenen Datensàtze besser erst im Anschluss sortieren?


Gangbar schon, Du müsstest selber die passende Zeile suchen, eine
Zeile einfügen und dort die Daten reinschreiben, IMHO viel zu
aufwendig. Ein an-/abschließendes Sortieren ist viel einfacher und
sicherer.

BTW, Du solltest nicht mit Select/ActiveCell/Selection arbeiten, das
macht Makro's langsam und ist fehleranfàllig. Die letzte Zeile in
Spalte A kann man so viel einfacher und zuverlàssiger ermitteln:
letzteZeile = Range("A" & Rows.Count).End(xlUp).Row + 1

BTW2, wenn man oft eine Referenz braucht kann man das mit einer WITH-
Anweisung einfacher haben:
with ThisWorkbook.Sheets("Tabelle1")
.Cells(letzteZeile, 1) = txtName.Value
'etc.
end with
Beachte den Punkt vor Cells!

Für den Fall das die Userform in die aktuelle Tabelle schreibt: Lass
ThisWorkbook.Sheets("Tabelle1") einfach weg.

Andreas.

Ähnliche fragen