An Ästheten

Hallo ihr Excelexperten,

ich habe folgendes Problem.

Ich habe eine Userform in der ich über 17 Eingabefelder deren Werte mittels Buttondrücken in verschiedene Felder übertragen will.
Die Summe dieser Werte will ich mir zudem in der Userform in einem eigens dafür bestimmten Label anzeigen lassen.

Zuerst die gute Nachricht:
Es funktioniert mittlerweile.

Jetzt die schlechte:
Es sieht aus wie ein frisch rasiertes Oppossum…

Ich habe ja bereits alles versucht aber ich bekomme den Code kürzer nicht zum laufen…
Kann ich da nicht irgendwie ne Variable setzen?
Diese Auflistung muss man sich doch irgendwie sparen können…

Hier der Quellcode für das Label(„Label45“) das die einzelnen Felder("PartieX) summiert…(leicht gekürzt)

Private Sub Summe()
Dim Summe As Integer
On Error Resume Next
Summe = 0
Summe = Summe + Int(Partie1.Text)
Summe = Summe + Int(Partie2.Text)
Summe = Summe + Int(Partie3.Text)



Summe = Summe + Int(Partie17.Text)
Label45.Caption = Str(Summe)
End Sub

und hier für das Übertragen ins Sheet über CommandButton1:
Die Nummer ist bereits im Sheet Spalte B und nachdem sich das Makro den Wert des Eingebfeldes „Nummer“ rausgesucht hat, werden ind er zeile daneben die dann die verschiedenen zugehörigen Werte (Partie1-17) eingetragen…

Private Sub CommandButton1_Click()
'Range(„D:U“).Select
Sheets(„Rohrippe Grades“).Select
Range(„B:B“).Select
Selection.Find(What:=Nummer * 1, After:=ActiveCell, LookIn:=xlValues _
, LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext _
, MatchCase:=False, SearchFormat:=False).Select

Zeile = ActiveCell.Row

Cells(Zeile, 4) = Partie1 * 1
Cells(Zeile, 5) = Partie2 * 1
Cells(Zeile, 6) = Partie3 * 1



Cells(Zeile, 20) = Partie17 * 1

End Sub

Danke für eure Aufmerksamkeit, es ist nicht dringlich aber muss doch irgendwie eleganter zu machen sein, meint ihr nicht?

Gruss

Max

Kleine Korrektur
Von wegen es funktioniert…

Private Sub CommandButton1_Click()
'Range(„D:U“).Select
Sheets(„Rohrippe Grades“).Select
Range(„B:B“).Select
Selection.Find(What:=Nummer * 1, After:=ActiveCell,
LookIn:=xlValues _
, LookAt:=xlPart, SearchOrder:=xlByColumns,
SearchDirection:=xlNext _
, MatchCase:=False, SearchFormat:=False).Select

Zeile = ActiveCell.Row

Cells(Zeile, 4) = Partie1 * 1
Cells(Zeile, 5) = Partie2 * 1
Cells(Zeile, 6) = Partie3 * 1



Cells(Zeile, 20) = Partie17 * 1

Funktioniert nicht wenn ein Textfeld leerbleibt…
Wie schlampig von mir…

So Stimmts für jeden der zwei Fälle

UND DAS MACHT ES NOCH SCHLIMMER!!

If Partie1.Value = True Then Cells(Zeile, 4) = Partie1 * 1
If Partie2.Value = True Then Cells(Zeile, 5) = Partie2 * 1
If Partie3.Value = True Then Cells(Zeile, 6) = Partie3 * 1
If Partie4.Value = True Then Cells(Zeile, 7) = Partie4 * 1
If Partie5.Value = True Then Cells(Zeile, 8) = Partie5 * 1
If Partie6.Value = True Then Cells(Zeile, 9) = Partie6 * 1
If Partie7.Value = True Then Cells(Zeile, 10) = Partie7 * 1
If Partie8.Value = True Then Cells(Zeile, 11) = Partie8 * 1
If Partie9.Value = True Then Cells(Zeile, 12) = Partie9 * 1
If Partie10.Value = True Then Cells(Zeile, 13) = Partie10 * 1
If Partie11.Value = True Then Cells(Zeile, 14) = Partie11 * 1
If Partie12.Value = True Then Cells(Zeile, 15) = Partie12 * 1
If Partie13.Value = True Then Cells(Zeile, 16) = Partie13 * 1
If Partie14.Value = True Then Cells(Zeile, 17) = Partie14 * 1
If Partie15.Value = True Then Cells(Zeile, 18) = Partie15 * 1
If Partie16.Value = True Then Cells(Zeile, 19) = Partie16 * 1
If Partie17.Value = True Then Cells(Zeile, 20) = Partie17 * 1

Hilfe!

Hallo Max,

wenn du deine Textboxen systematisch benennst und nummerierst, dann kannst du über Do-Loop oder For-Next Schleifen die Inhalte der Textboxen auswerten.

Gruß
Franz

Für deinen Fall sieht es etwa so aus:

Private Sub Var\_Summe() 
'Variante summiert Elemente, deren Name mit einem bestimmten Text beginnt
 Dim Summe As Integer, Element As Control
 Summe = 0
 For Each Element In Me.Controls
 If Left(Element.Name, 6) = "Partie" Then
 If Element.Text "" Then
 Summe = Summe + Int(CDbl(Element.Text))
 End If
 End If
 Next
 Label45.Caption = Str(Summe)
End Sub


Private Sub Summe()
 'Variante funktioniert wenn Namen der Boxen lückenlos von 1 bis 17 nummeriert sind
 Dim Summe As Integer, Element As Control
 Summe = 0
 For I = 1 To 17
 With Me.Controls("Partie" & I)
 If .Text "" Then
 Summe = Summe + Int(CDbl(.Text))
 End If
 End With
 Next
 Label45.Caption = Str(Summe)
End Sub


Private Sub CommandButton1\_Click()
'Range("D:U").Select
 Sheets("Rohrippe Grades").Select
 Range("B:B").Select
 Selection.Find(What:=Nummer \* 1, After:=ActiveCell, LookIn:=xlValues \_
 , LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext \_
 , MatchCase:=False, SearchFormat:=False).Select
 Zeile = ActiveCell.Row

 For I = 1 To 17
 With Me.Controls("Partie" & I)
 If .Text "" Then
 Cells(Zeile, I + 3) = CDbl(.Text)
 Else
' Cells(Zeile, I + 3) = 0
' Cells(Zeile, I + 3) = ""
 Cells(Zeile, I + 3).ClearContents 'oder eine der beiden anderen Varianten
 End If
 End With
 Next
End Sub

Hallo Max,

Sofern deine Controls alle einen „zählbaren“ Namen haben kann man diese per Schleife durchlaufen.

als ersten Ansatz:

wert = 0
For i = 1 To 5
wert = wert + int(formularName.Controls(„control_“ & i).value)
next

Dazu müssen die Controls halt ontrol_1, control_2 etc benannt sein.

mfg

Dirk.Pegasus

Hallo Frank, Hallo Dirk,

danke erstmal für eure antworten.
Dirk, mit deiner antwort kann ich leider wenig anfangen… zu wenig Kenntnisse meinerseits

Frank kann es sein dass deine Lösung bei mir nicht funktioniert, weil ich meine Texfelder noch als Zahlen deklarieren muss bis er mit ihnen rechnet? Wenn ja Wie?

Habe beide Varianten nacheinander ausprobiert.

Keine Fehlermeldungen allerdings auch keine Reaktion.

wofür steht eigentlcih die sechs in der ersten Variante?
Buchstaben bis die nummer anfängt?

Danke erstmal für die Vorschläge ich probier da noch weiter rum…

Gruss Max

Hallo Max,

ich hab alles mit EXCEL97 erstellt und für 3 Text-Boxen probiert. Lief reibungslos. Version-Probleme erwarte ich bei dieser Makro-Anwendung eigenlich nicht.

Frank kann es sein dass deine Lösung bei mir nicht
funktioniert, weil ich meine Texfelder noch als Zahlen
deklarieren muss bis er mit ihnen rechnet? Wenn ja Wie?

Eigentlich sollte das Makro die Eingabe verarbeiten. Die Funktion CDbl wandelt die Eingabe (Zahl als Text) in eine Zahl. Allerdings mag sie keine Leerstrings, deshalb die Prüfung auf „“. Bei Texten gibt es mit CDbl eine Fehlermeldung. In deutscher Exel-Version müssen Dezimalsahlen mit Komma eingegeben werden.

Habe beide Varianten nacheinander ausprobiert.

Setze im Code mal zu Beginn der Makros Haltepunkte und starte das Useform. Setze die Ausführung mit Taste F8 schrittweise fort, dann kannst du sehen welche Werte die Variablen haben und wie die If-Bedingungen und Schleifen verarbeitet werden

Keine Fehlermeldungen allerdings auch keine Reaktion.

Kann ich mir irgendwie nicht vorstellen. Wird das Makro denn korrekt aufgerufen und ausgeführt? Selbst wenn das Makro aus welchen Gründen keinen Wert für die Summe berechnet, dann müßte zumindest die Anzeige Für Label45 auf 0 springen wenn das Makro ausgeführt wird.

wofür steht eigentlcih die sechs in der ersten Variante?
Buchstaben bis die nummer anfängt?

Ja, es werden in diesem Fall die linken 6 Zeichen auf Gleichheit geprüft.

Gruß
Franz

P.S. Kannst mir die Datei auch per e-mail schicken. Dann schau ich mal rein.