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

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
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

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

UserForm durch CommandButton schließen

Hallo zusammen,

ich habe eine UserForm mit verschiedenen OptionButtos. Durch klicken auf einen CommandButton soll zum einen je nach ausgewähltem OptionButton eine neue UserForm geöffnet werden, dass ist kein Problem, und zum anderen die aktuelle UserForm geschloßen werden. Wie bekomme ich das hin?

Hier der Code, den ich bisher habe:

Private Sub CommandButton1_Click()

If OptionButton1 = True Then
    UserForm2.Show
ElseIf OptionButton2 = True Then
    UserForm3.Show
ElseIf OptionButton3 = True Then
    UserForm4.Show
ElseIf OptionButton4 = True Then
    UserForm5.Show
ElseIf OptionButton5 = True Then
    UserForm6.Show
ElseIf OptionButton6 = True Then
    UserForm7.Show
ElseIf OptionButton7 = True Then
    UserForm8.Show
ElseIf OptionButton8 = True Then
    UserForm9.Show
ElseIf OptionButton9 = True Then
    UserForm10.Show
ElseIf OptionButton10 = True Then
    UserForm11.Show
ElseIf OptionButton11 = True Then
    UserForm12.Show
End If
    

End Sub

...zur Frage

UserForm Textboxen mit Werten aus Excel Datei füllen?

Ich habe eine Excel Datei, die mittels Makro mit Werten befüllt wird.

Dasselbe Makro soll nun eine bestimmte Spalte der Datei durchlaufen und dann mittels Schleife alle TextBoxen der UserForm mit diesen Werten füllen.

Mein Versuch dazu:

  Dim i As Byte
  Dim currentName As String

For i = 1 To 10

    currentName = sheet.Cells(i, "H").Value
    

    UserForm1.Controls("TextBox" & CStr(i)).Value = currentName

Next

Funktioniert leider nicht. Muss ich bei der Initialisierung der UserForm oder der TextBoxen noch was beachten?

Fehlermeldung: Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt.

Folgende Zeile wird markiert:

UserForm1.Controls("TextBox" & CStr(i)).Value = currentName
...zur Frage

Was möchtest Du wissen?