Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1076to1080
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

Schleife

Schleife
24.05.2009 12:06:37
Nico
Ich hab da mal eine Frage.
Ich habe in einem Userform 30 Textfelder welche Betrag1 ... Betrag30 benannt wurden. Mit jedem AfterUpdate dieser Felder muss eine Aktion ausgeführt werden, welche wie folgt aussieht:

Sub rechne_check_bonSumme()
Dim error As Integer
Dim a1, a2, a3, a4, a5 As Double
If IsNumeric(betrag1.Value) Then
a1 = betrag1
Else
If betrag1.Value = "" Then
a1 = 0
Else
error = 1
End If
End If
If IsNumeric(betrag2.Value) Then
a2 = betrag2
Else
If betrag2.Value = "" Then
a2 = 0
Else
error = 1
End If
End If
If IsNumeric(betrag3.Value) Then
a3 = betrag3
Else
If betrag3.Value = "" Then
a3 = 0
Else
error = 1
End If
End If
If error = 0 Then
check_bonSumme.Caption = CDbl(bonsumme.Value * -1) + CDbl(a1) + CDbl(a2) + CDbl(a3)
Else
MsgBox ("In den Feldern für Betrag dürfen nur Zahlen eingegeben werden!")
End If
End Sub


Ziel soll sein die Summe aller 30 Felder zu ermitteln und das bei jedem AfterUpdate dieser Felder.
Wie kann ich die Routinen der einzelnen Textfelder "if isnumeric ..." in eine Schleife packen, um nicht 30mal die Routine schreiben zu müssen?
Vielen Dank für Eure Hilfe!

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schleife
24.05.2009 12:13:31
Josef
Hallo Nico,
Sub rechne_check_bonSumme()
  Dim dblSum As Double, lngIndex As Long
  
  For lngIndex = 1 To 30
    With Controls("betrag" & CStr(lngIndex))
      If IsNumeric(.Value) Then
        If .Value <> "" Then dblSum = dblSum + CDbl(.Value)
      Else
        MsgBox ("In den Feldern für Betrag dürfen nur Zahlen eingegeben werden!")
        Exit Sub
      End If
    End With
  Next
  
End Sub

Gruß Sepp

Anzeige
AW: Schleife
24.05.2009 13:10:16
Nico
Vielen Dank für die Super-Schnelle Hilfe.
Ich hatte es in der Zwischenzeit mit folgendem Code versucht:
Dim cnt As Control
For Each cnt In Controls
If TypeName(cnt) = "TextBox" And CBool(cnt.Name Like "betrag*") = True Then
' Debug.Print cnt.Name
End If
Next cnt
Problem hier war nur, dass ich nicht auf den Inhalt der Felder zugreifen konnte " cnt.Name.Value" oder so.
Aber Dein Code funktioniert perfekt und ich muss Ihn nur minimal ändern.
Danke noch mal.
AW: Schleife
24.05.2009 13:17:41
Josef
Hallo Nico,
mit Controls geht's so.
Dim cntrl As MSForms.Control
Dim dblSum As Double

For Each cntrl In Me.Controls
  If TypeName(cntrl) = "TextBox" Then
    With cntrl
      If .Name Like "betrag*" Then
        If IsNumeric(.Value) Then
          If .Value <> "" Then dblSum = dblSum + CDbl(.Value)
        Else
          MsgBox ("In den Feldern für Betrag dürfen nur Zahlen eingegeben werden!")
          Exit Sub
        End If
      End If
    End With
  End If
Next

Gruß Sepp

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige