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

automatisiertes Rechnen in Unserfom

automatisiertes Rechnen in Unserfom
30.10.2018 13:10:26
Thomas
Guten Tag zusammen
Bin wieder mal an einer neuen Userform am Basteln und komme nicht weiter.
Die Userform hat rund 30 TextBoxen (TB 1 - 30), in welche Zahlen eingegeben werden. Nach Click auf CommandButton soll jede dieser TBs mit 1.2 multipliziert und die Resultate in den TextBoxen 31 - 60 ausgegeben werden.
also:
Werteingabe in TB1 -- Multiplikation x 1.2 --> Resultatausgabe in TB31
Werteingabe in TB2 -- Multiplikation x 1.2 --> Resultatausgabe in TB32
usw. bis
Werteingabe in TB30 -- Multiplikation x 1.2 --> Resultatausgabe in TB60
Im Forum habe ich bereits folgendes gefunden:
Private Sub CommandButton1_Click()
Dim A As Integer
For A = 31 To 60
Controls("TextBox" & A).Value = TextBox1 * 1.2
Next
End Sub
Nun die Frage:
Hat jemand eine Idee, wie ich den obigen Code anpassen muss, damit die von mir gewünschten Multiplikationen erfolgen?
Vielen Dank für eure Hilfe
Thomas

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: automatisiertes Rechnen in Unserfom
30.10.2018 13:24:48
EtoPHG
Hallo,
Die Textboxen müssen auch so heissen (TextBoxN), sonst müssen die Strings entspr. angepasst werden. Der Code gehört in die Userform.
Private Sub CommandButton1_Click()
Const Faktor As Double = 1.2
Dim iX As Integer
For iX = 1 To 30
Controls("TextBox" & (iX + 30)) = Val(Controls("TextBox" & iX)) * Faktor
Next iX
End Sub
Gruess Hansueli
AW: automatisiertes Rechnen in Unserfom
30.10.2018 13:51:35
Thomas
Hoi Daniel, hoi Hansueli
Vielen Dank für eure prompte Hilfe. Beide von euch vorgeschlagenen Codes funktionieren einwandfrei. Freude herrscht.
Nachfrage: Wie ergänze ich die Codes, damit ich nur ganze Zahlen bekomme?
Danke und Gruss
Thomas
Anzeige
AW: automatisiertes Rechnen in Unserfom
30.10.2018 14:00:26
Daniel
Hi
Controls("TextBox" & iX + 30) = Format(... hier die Berechnugn ... "0")
oder mit einer der Rundungsfunktionen
Round()
Worksheetfunction.Round()
Worksheetfunction.RoundUp()
Worksheetfunction.RoundDown()
je nachdem wie du genau runden willst (Runden, Aufrunden, Abrunden, bei 0.5 zur nächsten geraden Zahl hin runden, bei 0.5 immer aufrunden)
Gruß Daniel
AW: automatisiertes Rechnen in Unserfom
30.10.2018 14:27:49
Thomas
Hoi Daniel
Perfekt. Vielen Dank.
Gruss, Thomas
AW: automatisiertes Rechnen in Unserfom
30.10.2018 16:56:57
Thomas
Hoi Daniel
Hat alles super geklappt und läuft wie gewünscht.
Nun gibt es noch 2 kleine Probleme, welche zu lösen sind.
1) Keiner der Werte in TB 31 - TB 60 erhaltenen Werte (d.h. nach der Multiplikation mit dem Faktor) darf grösser sein als der Wert in TB 30.
Bsp.
TB 26 = 1'000 TB 56 = 1'200
TB 27 = 2'000 TB 57 = 2'400
TB 28 = 3'000 TB 58 = 3'600
TB 29 = 4'000 TB 59 = 4'800
TB 30 = 5'000 TB 60 = 5'000
2) Es wäre zudem mega, wenn die Werte in den TB's wie oben mit Tausendertrennzeichen versehen wären.
Gibt es da eine Möglichkeit, diese beiden Wünsche zu verwirklichen?
Danke und Gruss
Thomas
Anzeige
AW: automatisiertes Rechnen in Unserfom
30.10.2018 17:09:21
Werner
Hallo Thomas,
für das Format mit Tausendertrennzeichen in den Textboxen:
Controls("TextBox" & (iX + 30)) = Format(Val(Controls("TextBox" & iX)) * Faktor, "#,###"
Und wegen dem "Größenproblem":
Was soll den passieren wenn ein Wert in einer der Textboxen größer als der Wert in TB 30 ist?
Gruß Werner
AW: automatisiertes Rechnen in Unserfom
30.10.2018 17:22:28
Thomas
Hoi Werner
Vielen Dank für die Lösung mit dem Tausender-Trennzeichen.
Wenn ein Wert grösser oder gleich TB 30 ist, soll Wert TB 30 angezeigt werden.
Gruss, Thomas
AW: automatisiertes Rechnen in Unserfom
30.10.2018 17:49:51
Werner
Hallo Thomas,
versuch mal:
If Val(Controls("TextBox" & iX)) * Faktor > CDbl(TextBox30) Then
Controls("Textbox" & iX) = Format(TextBox30, "#,###")
Else
Controls("TextBox" & (iX + 30)) = Format(Val(Controls("TextBox" & iX)) * Faktor, "#,###")
End If
Gruß Werner
Anzeige
AW: automatisiertes Rechnen in Unserfom
30.10.2018 18:37:08
Thomas
Hoi Werner
Vielen Dank.
Bekomme Fehlermeldung bei If-Bedingung - CDbl(TextBox30) = Typen unverträglich
Hab schon ergänzende Klammer eingesetzt, hat nicht funktioniert.
Gruss, Thomas
AW: automatisiertes Rechnen in Unserfom
30.10.2018 19:22:08
Werner
Hallo Thomas,
lad bitte mal deine Datei hoch, ansonsten gibt das nur eine wilde Raterei.
Gruß Werner
AW: automatisiertes Rechnen in Unserfom
31.10.2018 08:16:34
Thomas
Guten Morgen Werner
Die Datei findest du unter
https://www.herber.de/bbs/user/125022.xlsm
Habe Gestern nach den erhaltenen Infos noch etwas an der UF rumgebastelt, etliche TBs, CBs, etc. eingefügt. Der Code der UF ist zweitweise wohl etwas kompliziert, bin halt kein Profi, smile. Vielen Dank für deine Hilfe.
Gruss, Thomas
Anzeige
AW: automatisiertes Rechnen in Unserfom
31.10.2018 11:12:55
Werner
Hallo Thomas,
der Fehler tritt deshalb auf, weil/wenn zum Zeitpunkt der Prüfung der TextBox609 diese TextBox leer ist.
Ich kenne deinen Programmablauf nicht und weiß auch nicht, welche Werte wann, wie erfasst werden. Zumindest beim Code deiner Schaltfläche "übernehmen" wird die TextBox609 nirgends befüllt.
Du mußt entweder dafür sorgen, dass die Prüfung auf die TextBox609, das hier
If Val(Controls("TextBox" & iA)) * 1.2 > CDbl(TextBox609) Then
Controls("Textbox" & iA) = Format(TextBox609, "#,###")
Else
Controls("TextBox" & (iA + 51)) = Format(Val(Controls("TextBox" & iA)) * 1.2, "#,###")
End If

erst ausgeführt wird, wenn die TextBox609 auch gefüllt ist, oder du baust noch eine Prüfung ein ob die TextBox609 einen Wert hat oder nicht.
Das habe ich in dem Code hier mal gemacht. Ich prüfe, ob die TextBox609 leer ist, wenn ja, dann wird eine 0 in die TextBox609 geschrieben.
So wird die Fehlerauslösung verhindert. Ob das dann mit deinen Berechnungen so noch passt weiß ich nicht.
Der Code ist auch noch etwas eingekürzt. Die Variablendeklarierung gehört in den Kopf des Makros und nicht mitten ins Makro. Zudem macht es auch keinen Sinn mehr Laufvariablen als Integer zu deklarieren.
Private Sub CommandButton25_Click()
Dim J As Long, i As LongD, iA As Long, iB As Long, iC As Long, iD As Long
Dim iE As Long, iG As Long, iG As Long, iH As Long, iJ As Long, iK As Long
CommandButton23.Locked = False
CommandButton24.Locked = False
CommandButton25.Locked = True
'TX Boxen Einkommen und AHV-Rente sperren machen'
For J = 508 To 609
Me.Controls("TextBox" & J).Locked = True
Me.Controls("TextBox" & J).BackColor = &H8000000F
Me.Controls("TextBox" & J).SpecialEffect = fmSpecialEffectFlat
Next
'Werte Einkommen eintragen in UF und in Arbeitsblatt übertragen'
With Sheets("Skala 44")
For i = 508 To 558
.Range("A" & i - 501) = Me.Controls("TextBox" & i)
Next i
'Werte AHV-/IV-Rente eintragen in UF und in Arbeitsblatt übertragen'
For i = 559 To 609
.Range("C" & i - 552) = Me.Controls("TextBox" & i)
Next i
End With
'Berechnen Altersrente Witwen (monatlich) anhand AHV-/IV-Rente, Faktor 1.2'
For iA = 559 To 609
'### Fehler tritt auf, weil/wenn die TextBox609 leer ist #####
If Me.TextBox = "" Then Me.TextBox = 0
If Val(Controls("TextBox" & iA)) * 1.2 > CDbl(textbox609) Then
Controls("Textbox" & iA) = Format(textbox609, "#,###")
Else
Controls("TextBox" & (iA + 51)) = Format(Val(Controls("TextBox" & iA)) * 1.2, "#,###")
End If
Next iA
'Berechnen Witwenrente (monatlich) anhand AHV-/IV-Rente, Faktor 0.8'
For iB = 559 To 609
Controls("TextBox" & (iB + 102)) = Format(Val(Controls("TextBox" & iB)) * 0.8, "#,###")
Next iB
'Berechnen Waisen-/Kinderrente (monatlich) anhand AHV-/IV-Rente, Faktor 0.4'
For iC = 559 To 609
Controls("TextBox" & (iC + 153)) = Format(Val(Controls("TextBox" & iC)) * 0.4, "#,###")
Next iC
'Berechnen Waisen-/Kinderrente 60% (monatlich) anhand AHV-/IV-Rente, Faktor 0.6'
For iD = 559 To 609
Controls("TextBox" & (iD + 204)) = Format(Val(Controls("TextBox" & iD)) * 0.6, "#,###")
Next iD
'Berechnen Alter-IV-Rente (jährlich) anhand AHV-/IV-Rente, Faktor 12'
For iE = 559 To 609
Controls("TextBox" & (iE + 255)) = Format(Val(Controls("TextBox" & iE)) * 12, "#,###")
Next iE
'Berechnen Alterrente, Witwen (jährlich) anhand AHV-/IV-Rente, Faktoren 1.2 * 12'
For iG = 559 To 609
Controls("TextBox" & (iG + 306)) = Format(Val(Controls("TextBox" & iG)) * 1.2 * 12, "#,###")
Next iG
'Berechnen Witwenrente (jährlich) anhand AHV-/IV-Rente, Faktoren 0.8 * 12'
For iH = 559 To 609
Controls("TextBox" & (iH + 357)) = Format(Val(Controls("TextBox" & iH)) * 0.8 * 12, "#,###")
Next iH
'Berechnen Waisenrente (jährlich) anhand AHV-/IV-Rente, Faktoren 0.4 * 12'
For iJ = 559 To 609
Controls("TextBox" & (iJ + 408)) = Format(Val(Controls("TextBox" & iJ)) * 0.4 * 12, "#,###")
Next iJ
'Berechnen Witwenrente 60% (jährlich) anhand AHV-/IV-Rente, Faktoren 0.6 * 12'
For iK = 559 To 609
Controls("TextBox" & (iK + 459)) = Format(Val(Controls("TextBox" & iK)) * 0.6 * 12, "#,###")
Next iK
End Sub
Gruß Werner
Anzeige
AW: automatisiertes Rechnen in Unserfom
31.10.2018 14:16:43
Thomas
Guten Mittag Werner
Vielen Dank für deinen immensen Einsatz und die Einkürzung des Codes. Den schlanken Code für die Übergabe der Werte von der UF in das Arbeitsblatt ist super, bei mir waren diese beiden Abschnitte je ewig lang. Auch betreffs Variablendeklaration habe ich was dazu gelernt.
Dein Ansatz bei der TXB609 finde ich gut, ich hätte dies wohl mit einer MsgBox versucht zu lösen.
Der neue Code funktioniert ziemlich gut.
3 Anmerkungen/Problemfelder dazu:
1) Bei der "If grösser TXB 609"-Bedingung scheint irgendwie noch der Wurm drin zu sein.
Fülle ich sämtliche Werte bei "Rente" ein und übernehme ich die Werte, so funktioniert der Code bei sämtlichen Spalten in UF bis zum Erreichen des vorgegebenen Max. Nach Überschreiten des Wertes werden keine Werte mehr in die Spalte "Rente" eingefügt, bei den anderen Spalten wird die faktorabhängige Multiplikation nicht/nicht mehr korrekt durchgeführt.
Entferne ich die If-Bedingung, funktionieren die Multiplikationen einwandfrei, hingegen sind dann die Wert-Maximierung bei den TBs 610-660 bzw. TB 865-915 nicht mehr aktiv. Was für ein Dilemma.
Ziel ist es, dass die Max-Beschränkung nur für die TBs 610-660 zur Anwendung kommt (siehe dazu Arbeitsblatt "Skala 44"), d.h. sämtliche TBs von 610-660 welche den Max-Wert TB609 überschreiten sollen den TB609-Wert zugewiesen bekommen. Die Maximierung muss nicht speziell für die TBs 865-915 gemacht werden, diese Werte ergeben sich ja dann aus der Multiplikation.
2) In der UF: Die TBs, bei welchen eine Multiplikation erfolgt ist das Resultat #,### formatiert. Kann man diese Formatierung auch für die TBs machen, in welche die Eingaben erfolgen (d.h. TBS Einkommen und Rente)? Hab schon etwas rumgepröbelt, bekomme dies aber nicht hin. Mist.
3) In Arbeitsblatt: Die Übergabe der Werte von UF in Arbeitsblatt scheint im Text-Format zu erfolgen. Hab schon versucht mit Einbau CDbl dies zu beheben, klappt aber irgendwie nicht.
Das überarbeitete File habe ich nochmals hochgeladen:
https://www.herber.de/bbs/user/125032.xlsm
Ich wäre dir dankbar, wenn du dir nochmals etwas Zeit nehmen könntest mir bei der Auflösung der noch offenen Punkte zu helfen.
Gruss, Thomas
Anzeige
AW: automatisiertes Rechnen in Unserfom
31.10.2018 19:42:25
Werner
Hallo Thomas,
was ich gerade sehe ist, dass du vermutlich hier
'Berechnen Altersrente Witwen (monatlich) anhand AHV-/IV-Rente, Faktor 1.2'
For iA = 559 To 609
'### Fehler tritt auf, weil/wenn die TextBox609 leer ist #####
If Me.TextBox = "" Then Me.TextBox = 0
If Val(Controls("TextBox" & iA)) * 1.2 > CDbl(TextBox609) Then
Controls("Textbox" & iA) = Format(TextBox609, "#,###")
Else
Controls("TextBox" & iA + 51) = Format(Val(Controls("TextBox" & iA)) * 1.2, "#,###")
End If
Next iA
das + 51 vergessen hast.
Das müsste doch vermutlich so sein:
'Berechnen Altersrente Witwen (monatlich) anhand AHV-/IV-Rente, Faktor 1.2'
For iA = 559 To 609
'### Fehler tritt auf, weil/wenn die TextBox609 leer ist #####
If Me.TextBox = "" Then Me.TextBox = 0
If Val(Controls("TextBox" & iA)) * 1.2 > CDbl(TextBox609) Then
Controls("Textbox" & iA + 51) = Format(TextBox609, "#,###")
Else
Controls("TextBox" & iA + 51) = Format(Val(Controls("TextBox" & iA)) * 1.2, "#,###")
End If
Next iA
Die Code-Tags für die Fettschrift müssen aus dem Code natürlich wieder raus.
Gruß Werner
Anzeige
nochmal
31.10.2018 22:53:48
Werner
Hallo Thomas,
die Prüfung leer war auch noch falsch (aber von mir). Man sollte schon die Textbox609 prüfen wenn der Fehler bei Textbox609 auftritt.
'Berechnen Altersrente Witwen (monatlich) anhand AHV-/IV-Rente, Faktor 1.2'
For iA = 559 To 609
'### Fehler tritt auf, weil/wenn die TextBox609 leer ist #####
If Me.TextBox609 = "" Then Me.TextBox609 = 0
If Val(Controls("TextBox" & iA)) * 1.2 > CDbl(TextBox609) Then
Controls("Textbox" & iA + 51) = Format(TextBox609, "#,###")
Else
Controls("TextBox" & iA + 51) = Format(Val(Controls("TextBox" & iA)) * 1.2, "#,###")
End If
Next iA
Gruß Werner
Anzeige
AW: nochmal
01.11.2018 08:01:46
Thomas
Guten Morgen Werner
Funktioniert genau so wie ich mir das vorstelle. Super.
Es ist immer wieder erstaunlich, was eine kleine Änderung am Code für grosse Auswirkung am Resultat bewirken kann.
Vielen Dank für deine Hilfe.
Gruss, Thomas
AW: nochmal
01.11.2018 12:27:45
Werner
Hallo Thomas,
die anderen "Probleme" bzgl. der Formatierung der Textboxen bzw. der Datenübernahme in die Tabelle (als Text) bestehen weiterhin?
Wenn ja, dann poste mal bitte den Code für die Übernahme der Textboxen in die Tabelle. Im Moment kann ich nämlich keine .xlsm herunterladen.
Weiterhin sollte ich wissen, welche Textboxen händisch gefüllt werden, denn nur die sind ja bzgl. der Formatumstellung betroffen.
Gruß Werner
Anzeige
AW: nochmal
01.11.2018 17:24:41
Thomas
Guten Nachmittag Werner
Die anderen Probleme bestehen noch, habe dazu einen Lösungsansatz im Kopf, welchen ich mal testen werde. Ich melde mich morgen nochmals.
Gruss, Thomas
da fehlt noch...
30.10.2018 17:10:41
Werner
Hallo Thomas,
...eine Klammer am Schluß:
Controls("TextBox" & (iX + 30)) = Format(Val(Controls("TextBox" & iX)) * Faktor, "#,###")
Gruß Werner
AW: automatisiertes Rechnen in Unserfom
30.10.2018 13:30:47
Daniel
Hi
ohne Code:
1. verknüpfe die TextBoxen1-30 über die Controlsource mit einer Ausgabezelle (z.B. Tabelle1!A1 bis Tabelle1!A30)
2. Schreibe in die Tabelle1!B1-B30 die Formel: =A1*1,2
2. Ersetze die Textboxen 31-60 durch Listboxen und vernküpfe jede der Listboxen über die Eigenschaft Rowsource mit einer Zelle in Tabelle1!B1 bis B30
die Ausgabeboxen solltest du hier als Listbox anlegen, da bei TextBoxen die Möglichkeit besteht, die Formel in der verknüpften Zelle mit einem Festwert zu überschreiben.
ansonsten als Code so
dim A as Long
for A = 1 to 30
If IsNumeric(Controls("Textbox" & A).Text) Then
Controls("TextBox" & A + 30).Text = CDBl(controls("TextBox" & A).Text) * 1.2
end if
Next
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige