Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: addieren aus Textboxes, wenn Checkbox aktiv

addieren aus Textboxes, wenn Checkbox aktiv
Wolfgang
Hallo,
ich hatte mir gedacht, dass nachstehender Code funktionieren müsste. Macht er aber nicht; er zeigt mir zwar die einzelnen Summen in Textbox10 an, aber addiert sie nicht zu einer Gesamtsumme. Was mache ich verkehrt? - Ich würde also gerne erreichen, dass,sofern die jeweilige CheckBox aktiviert ist, die Summe(n) addiert wird und das Gesamtergebnis in Textbox10 angezeigt wird. Danke schon jetzt wieder für die Rückmeldungen.
Herzliche Grüße
Wolfgang
Private Sub CommandButton9_Click()
OptionButton2.Value = True
If CheckBox1.Value = True Then
TextBox10.Value = TextBox26.Value
If CheckBox1.Value And CheckBox2.Value = True Then
TextBox10.Value = TextBox26.Value + TextBox29.Value
If CheckBox1.Value And CheckBox2.Value And CheckBox3.Value = True Then
TextBox10.Value = TextBox26.Value + TextBox29.Value + TextBox32.Value
If CheckBox1.Value And CheckBox2.Value And CheckBox3.Value And CheckBox4.Value = True Then
TextBox10.Value = TextBox26.Value + TextBox29.Value + TextBox32.Value + TextBox33.Value
End If
End If
End If
End If
End Sub

Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 08:32:39
Josef
Hallo Wolfgang,
TetxBoxes enthalten, wie der Name ja schon sagt, Text. Und Text kann man halt nicht einfach
addieren. Du musst die Texte mit CDbl() in eine Zahl umwandeln.
ich würde es so lösen, allerdings fehlt noch eine Fehlerüberprüfung, wenn eine Textbox leer ist,
oder keinen numerischen Wert enthält.

Private Sub CommandButton9_Click()
  Dim intIndex As Integer, dblSum As Double
  Dim intN() As Variant
  
  intN = Array(26, 29, 32, 33)
  
  For intIndex = 1 To 4
    If Me.Controls("CheckBox" & CStr(intIndex)) Then
      dblSum = dblSum + CDbl(Me.Controls("TextBox" & CStr(intN(intIndex - 1))))
    Else
      Exit For
    End If
  Next
  TextBox10 = dblSum
End Sub

Gruß Sepp

Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 09:00:13
Wolfgang
Hallo Josef,
erneut herzlichen Dank für Deine Rückmeldung. Ich habe den Code "eingebaut" und getestet. Wäre denkbar, dass er nur dann addiert, wenn ich bei der CheckBox1 anfange und dann jeweils die nächste nehmen muss? Aktiviere ich z.B. nur die CheckBox3 und/oder 4, dann tut sich nichts. Es wäre schön, dass ich erreichen könnte, z.B. die Summe von Box3+4 oder nur 3 oder auch nur 2 oder 1+4 etc. in die TextBox10 zu bekommen. Hättest Du da evtl. noch eine Idee? - Danke schon jetzt wieder für Deine Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 09:15:13
Josef
Hallo Wolfgang,
dazu brauchst du nur den Else-Teil aus der If-Abfrage entfernen.
Private Sub CommandButton9_Click()
  Dim intIndex As Integer, dblSum As Double
  Dim intN() As Variant
  
  intN = Array(26, 29, 32, 33)
  
  For intIndex = 1 To 4
    If Me.Controls("CheckBox" & CStr(intIndex)) Then
      dblSum = dblSum + CDbl(Me.Controls("TextBox" & CStr(intN(intIndex - 1))))
    End If
  Next
  TextBox10 = dblSum
End Sub

Gruß Sepp

Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 08:46:44
fcs
Hallo Wolfgang,
Textboxen enthalten, wie der Name sagt, Text und Text addiert Excel nicht.
Leider hat der VBA-Compiler von Excel inzwischen die Unsitte, dass er das "+"-Zeichen nicht nur als mathematische Addition interpretiert sondern bei Texten als Parameter auch als Verkettung von Textzeichen, für das eigenlich der Operator "&" vorbehalten ist.
So werden bei dir die Textboxinhalte ohne Fehlermeldung einfach aneinander gefügt, statt sie zu addieren. Du muss die Textbox-Inhalte in VBA in Zahlen umwandeln und dann addieren.
Schaut dann wie folgt aus, wobei du die If-Konstruktion in deinem Fall etwas vereinfachen kannst. Die Wertumwandlung wird hier in einer kleinen Function realisiert, die für jede Textbox aufgerufen wird.
Gruß
Franz
Private Sub CommandButton9_Click()
Dim Summe As Double
OptionButton2.Value = True
If CheckBox1.Value = True Then
Summe = fncWert(TextBox26.Value)
If CheckBox2.Value = True Then
Summe = Summe + fncWert(TextBox29.Value)
If CheckBox3.Value = True Then
Summe = Summe + fncWert(TextBox32.Value)
If CheckBox4.Value = True Then
Summe = Summe + fncWert(TextBox33.Value)
End If
End If
End If
TextBox10.Value = Format(Summe, "#,##0.00")
'    TextBox10.Value = Summe
End If
End Sub
Function fncWert(sText As String) As Double
If sText = "" Then
fncWert = 0
Else
If IsNumeric(sText) Then
fncWert = CDbl(sText)
End If
End If
End Function

Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 09:15:08
Wolfgang
Hallo Franz,
Danke für Deine Rückmeldung. Ich hatte wohl, während du Deinen Beitrag upgeloadet hast, den Beitrag an Josef geschrieben. In beiden Codes taucht der Knackpunkt auf, dass ich bei CheckBox1 anfangen muss und dann bis CheckBox4 gehen muss. Wäre denkbar, z.B. nur 3+4 oder 2+3 oder auch nur CheckBox2 etc. zu berücksichtigen, um dann die Summe in TextBox10 zu erhalten? - Danke schon jetzt wieder für Deine Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 09:27:22
fcs
Hallo Wolfgang,
mit folgender Anpassung der Hauptptozedur kannst du eine beliebige Kombination der Werte Summieren.
Bei sher vieln Textboxen ist aber Josefs Lösung vorzuziehen, wobei du meine Function dort ja einfach einbauen kannst.
Gruß
Franz
Private Sub CommandButton9_Click()
Dim Summe As Double
OptionButton2.Value = True
If CheckBox1.Value = True Then Summe = Summe + fncWert(TextBox26.Value)
If CheckBox2.Value = True Then Summe = Summe + fncWert(TextBox29.Value)
If CheckBox3.Value = True Then Summe = Summe + fncWert(TextBox32.Value)
If CheckBox4.Value = True Then Summe = Summe + fncWert(TextBox33.Value)
TextBox10.Value = Format(Summe, "#,##0.00")
TextBox10.Value = Summe
End Sub

Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 10:04:31
Wolfgang
Hallo Franz,
erneut herzlichen Dank für Deine Rückmeldung und Ausarbeitungen; Du hast mich neugierig gemacht, so dass ich versucht habe, den Code von Josef mit Deiner Funktion zu kombinieren. Könntest Du mir da einen Tipp geben, wo ich da ansetzen kann, da ich bei den bisherigen Versuchen fortlaufend Fehlermeldungen erhalte. - Danke schon jetzt wieder für Deine Rückmeldung.
Gruß - Wolfgang
Anzeige
AW: addieren aus Textboxes, wenn Checkbox aktiv
17.10.2009 10:18:48
Josef
Hallo Wolfgang,
na ganz einfach so.
Private Sub CommandButton9_Click()
  Dim intIndex As Integer, dblSum As Double
  Dim intN() As Variant
  
  intN = Array(26, 29, 32, 33)
  
  For intIndex = 1 To 4
    If Me.Controls("CheckBox" & CStr(intIndex)) Then
      dblSum = dblSum + fncWert(Me.Controls("TextBox" & CStr(intN(intIndex - 1))))
    End If
  Next
  TextBox10 = dblSum
End Sub

Function fncWert(sText As String) As Double
  If sText = "" Then
    fncWert = 0
  Else
    If IsNumeric(sText) Then
      fncWert = CDbl(sText)
    End If
  End If
End Function

Gruß Sepp

Anzeige
wobei man die Funktion noch kürzen kann
17.10.2009 10:24:29
Josef
Hallo nochmal,
die Funktion lässt sich auf's wesentliche reduzieren.
Function fncWert(sText As String) As Double
  If IsNumeric(sText) Then fncWert = CDbl(sText)
End Function

Gruß Sepp

Anzeige
Danke Josef und Franz !!
17.10.2009 10:44:27
Wolfgang
Hallo Josef und Franz,
zunächst recht herzlichen Dank für Eure Geduld mit mir und für Eure vielfältigen Rückantworten sowie Ausarbeitungen. Ich habe mich, so wie Du schon vorgeschlagen hattest, Franz, für die Mischung beider Codes/Beiträge entschieden. Die Funktion so einzusetzen, wie es sich nun darstellt, hatte ich auch versucht, aber irgendwie immer noch einen "Bock" 'drin. Ich freue mich sehr über Eure Beiträge und kann mich an dieser Stelle nur immer wiederholen, um festzustellen, wie qualitativ hoch und schnell die Hilfestellung/Unterstüzung in diesem Forum ist. Nochmals recht herzlichen Dank und ein schönes Wochenende noch!
Gruß - Wolfgang
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Textboxen addieren, wenn Checkbox aktiv ist


Schritt-für-Schritt-Anleitung

  1. Erstelle die Benutzeroberfläche: Füge in einem Excel-Arbeitsblatt mehrere Textboxen (z.B. TextBox26, TextBox29, TextBox32, TextBox33) und Checkboxen (CheckBox1 bis CheckBox4) hinzu.
  2. Füge einen CommandButton hinzu: Dieser Button wird verwendet, um die Berechnung auszulösen.
  3. Öffne den Visual Basic for Applications (VBA) Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  4. Erstelle das folgende VBA-Skript: Kopiere den Code in das Codefenster des CommandButtons.
Private Sub CommandButton9_Click()
    Dim Summe As Double
    OptionButton2.Value = True
    If CheckBox1.Value = True Then Summe = Summe + fncWert(TextBox26.Value)
    If CheckBox2.Value = True Then Summe = Summe + fncWert(TextBox29.Value)
    If CheckBox3.Value = True Then Summe = Summe + fncWert(TextBox32.Value)
    If CheckBox4.Value = True Then Summe = Summe + fncWert(TextBox33.Value)
    TextBox10.Value = Format(Summe, "#,##0.00")
End Sub

Function fncWert(sText As String) As Double
    If IsNumeric(sText) Then fncWert = CDbl(sText)
End Function
  1. Teste die Anwendung: Aktiviere verschiedene Checkboxen und klicke auf den CommandButton, um die Summe in TextBox10 anzuzeigen.

Häufige Fehler und Lösungen

  • Problem: Die TextBoxen addieren sich nicht korrekt.

    • Lösung: Stelle sicher, dass die Werte in den TextBoxen numerisch sind. Nutze die Funktion CDbl() zur Umwandlung.
  • Problem: Fehler beim Klicken des CommandButtons.

    • Lösung: Überprüfe, ob alle TextBoxen und Checkboxen korrekt benannt sind und keine Tippfehler im Code vorhanden sind.
  • Problem: Es wird nicht addiert, wenn keine CheckBox aktiv ist.

    • Lösung: Der Code muss so angepasst werden, dass er nur die aktivierten Checkboxen berücksichtigt (siehe Schritt 4).

Alternative Methoden

Eine alternative Methode besteht darin, alle TextBoxen in einem Array zu speichern und eine Schleife zu verwenden, um die Werte zu addieren. Dies macht den Code kompakter und leichter wartbar:

Private Sub CommandButton9_Click()
    Dim Summe As Double
    Dim intN As Variant
    Dim i As Integer

    intN = Array(TextBox26, TextBox29, TextBox32, TextBox33)

    For i = LBound(intN) To UBound(intN)
        If Me.Controls("CheckBox" & (i + 1)).Value = True Then
            Summe = Summe + fncWert(Me.Controls(intN(i)).Value)
        End If
    Next i

    TextBox10.Value = Format(Summe, "#,##0.00")
End Sub

Praktische Beispiele

  • Beispiel 1: Wenn TextBox26 den Wert 10, TextBox29 den Wert 20, und die Checkboxen 1 und 2 aktiviert sind, wird in TextBox10 der Wert 30 angezeigt.
  • Beispiel 2: Wenn nur TextBox32 mit dem Wert 15 und die entsprechende Checkbox aktiviert ist, zeigt TextBox10 15 an.

Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere Error-Handling in deinem Code, um sicherzustellen, dass der Benutzer keine ungültigen Werte in die TextBoxen eingibt.
  • Optimierung der User Interface: Achte darauf, dass die Checkboxen und TextBoxen klar beschriftet sind, um die Benutzerfreundlichkeit zu erhöhen.
  • Nutze Formatierungen: Verwende die Format-Funktion, um die Ausgabe in TextBox10 ansprechend zu gestalten.

FAQ: Häufige Fragen

1. Frage
Kann ich auch mehr als vier TextBoxen und Checkboxen hinzufügen?
Ja, du kannst so viele TextBoxen und Checkboxen hinzufügen, wie du benötigst. Stelle sicher, dass du die Indizes im Code entsprechend anpasst.

2. Frage
Was passiert, wenn eine TextBox leer bleibt?
Wenn eine TextBox leer ist, wird der Wert als 0 betrachtet. Du kannst die Funktion fncWert erweitern, um spezifische Fehlermeldungen anzuzeigen, wenn der Wert nicht numerisch ist.

3. Frage
Wie kann ich den Code weiter anpassen?
Du kannst die Funktion fncWert anpassen, um spezifische Anforderungen zu erfüllen, z.B. Runden von Zahlen oder Hinzufügen von weiteren Validierungen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige