Wie ist es möglich mit Hilfe einer UserForm und den Kontrollkästchen Zellen nacheinander ohne Lücken zu beschriften?

...komplette Frage anzeigen

2 Antworten

Private Sub btnTexteEintragen_Click()
  Dim iAktZeile As Integer
  Dim cbx As Control
  iAktZeile = 2
  Range("A2:A8").Delete
  For Each cbx In formTexte.Controls
    If TypeName(cbx) = "CheckBox" Then
      If cbx Then
        Cells(iAktZeile, 1).Value = cbx.Caption
        iAktZeile = iAktZeile + 1
      End If
    End If
  Next
End Sub
Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von Ninombre
26.01.2016, 16:26

Den Ansatz finde ich sehr interessant. Über den Namen kann man dann auch in einer Schleife die Controls ansprechen... bisher nicht benötigt, aber jetzt gut zu wissen ;-)

Für die Frage vielleicht noch als Ergänzung: Es sollen ja Texte abhängig von der Auswahl gesetzt werden. Das würde ich der Flexibilität halber als Case Struktur noch einfügen. 

Ein paar Hinweise zu Stellen, die ich anpassen musste, und Du Dianisi vermutlich auch:

Bezeichnung Userform auf Deinen verwendeten Namen ändern, und (das habe ich umgestellt) die Namen der Checkboxen, nicht was an als Text angezeigt wird. Das ginge natürlich auch, dann müsste die Abfrage aber immer geändert werden, wenn der Text anpasst wird. Um dies zu tun einfach cbx.name durch cbx.caption ersetzen, dann zieht der angezeigte Text.

Private Sub CommandButton1_Click()
Dim iAktZeile As Integer
Dim cbx As Control
iAktZeile = 1
Range("A1:A13").Delete
For Each cbx In UserForm1.Controls
If TypeName(cbx) = "CheckBox" Then
If cbx Then
Select Case cbx.name
Case "CheckBox1":
Cells(iAktZeile, 1).Value = "der Text, der halt dann kommen soll"
iAktZeile = iAktZeile + 1
Case "CheckBox2":
Cells(iAktZeile, 1).Value = "der andere Text"
iAktZeile = iAktZeile + 1
End Select
End If
End If
Next
End Sub
1

Wie ist die Funktion bisher umgesetzt?

Die letzte verwendete Zeile in einer Spalte lässt sich so ermitteln: Cells(Rows.Count, 8).End(xlUp).Row
Dann noch +1, damit nicht die letzte Zeile überschrieben wird.

Anstatt also fest in cells(3,1) zu schreiben, könntest Du

If UserForm1.CheckBox1.Value = True Then Cells(Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Value = "Eins"

oder ähnlich verwenden

Anpassen musst Du noch die Spalte in der die letzte Zeile ermittelt wird. Bei mir ist das im Beispiel noch Spalte H, also 8

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?