PDA

Vollständige Version anzeigen : Chechboxschleife


Franky1966
07.06.2016, 18:18
Hallo,

ich brauche mal eure Hilfe! Mir ist folgende Vorgehensweise zu viel Arbeit.

Private Sub CheckBox1_Click()
If CheckBox1 = True Then
Worksheets("Kassenbuch").Range("k3").Value = Range("I3")
Worksheets("Datsich.Kassenbuch").Range("o3").Value = ("Ja")
End If

End Sub

Private Sub CheckBox2_Click()
If CheckBox2 = True Then
Worksheets("Kassenbuch").Range("k4").Value = Range("I4")
Worksheets("Datsich.Kassenbuch").Range("o4").Value = ("Ja")
End If

End Sub

Private Sub CheckBox3_Click()
If CheckBox3 = True Then
Worksheets("Kassenbuch").Range("k5").Value = Range("I5")
Worksheets("Datsich.Kassenbuch").Range("o5").Value = ("Ja")
End If

End Sub


Jede Checkbox macht ja das selbe, halt nur 1 tiefer. Kann man das zusammen fassen oder muss ich das für box einzeln machen.

Vorab schon Mal vielen Dank

Gruß
Franky 1966

R J
07.06.2016, 18:54
...Kann man das zusammen fassen oder muss ich das für box einzeln machen.

...jain... VBA stellt sich da etwas schwer an. Aber vereinfachen geht leicht:


Private Sub CheckBox1_Click()
auswerten checkbox1.Value, 3
End Sub

Private Sub CheckBox2_Click()
auswerten checkbox2.Value, 4
End Sub

Private Sub CheckBox3_Click()
auswerten checkbox3.Value, 5
End Sub

Sub auswerten(wie As Boolean, zeile As Long)
If wie Then
Worksheets("Kassenbuch").Range("k" & zeile).Value = Range("I" & zeile)
Worksheets("Datsich.Kassenbuch").Range("o" & zeile).Value = ("Ja")
End If
End Sub


PS: was passiert eigenrtlich, wenn die Checkbox deaktiviert wurde? Dann bleibt ja z. Bsp. Worksheets("Datsich.Kassenbuch").Range("o" & zeile).Value = ("Ja")
auf Ja.... muss das so sein?

drambeldier
07.06.2016, 18:54
Moin,
Jede Checkbox macht ja das selbe
könnte man meinen, in WIrklichkeit macht sie das gleiche für unterschiedliche Felder.

Natürlich könntest Du eine Prozedur schreiben, die als Parameter die Checkbox und die Felder bekommt, dann müsstets Du beim Ereignis nur noch den Aufruf mit dem richtigen Parametern unterbringen. Ob sich das für einen Zweizeiler lohnt?

Gruß
Ralf

Franky1966
07.06.2016, 19:37
Beide Tabellen sind identisch und werden mit den gleichen Werten von einer Userform gefüttert, die Zellen in Kassenbuch sperren sich nach Klick auf übernehmen.
Da ich ja durch das sperren Kassenbuch nicht mehr filtern kann, nutze ich dann Datsich.Kassenbuch zum filtern.

Nach dem checken bleibt immer "Ja", weil der check einen Zahlungseingang bestätigt.


Dieses Makro sieht gut aus! Würdest du mir den vollständigen Code geben? Bin Vba Neuling.
Sub auswerten(wie As Boolean, zeile As Long)
If wie Then
Worksheets("Kassenbuch").Range("k" & zeile).Value = Range("I" & zeile)
Worksheets("Datsich.Kassenbuch").Range("o" & zeile).Value = ("Ja")
End If
End Sub
[/CODE]

PS: was passiert eigenrtlich, wenn die Checkbox deaktiviert wurde? Dann bleibt ja z. Bsp. Worksheets("Datsich.Kassenbuch").Range("o" & zeile).Value = ("Ja")
auf Ja.... muss das so sein?[/QUOTE]

Beverly
07.06.2016, 19:50
Hi Franky,

muss das denn für jede CheckBox einzeln gemacht werden? Eventuell könnte man ja einen CommandButton verwenden und dann in einer Schleife über alle Checkboxen laufen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Franky1966
07.06.2016, 20:39
Hallo Karin,

In den Spalten von A bis G stehen Werte aus denen sich meine Einnahmen ergeben.

(Spalte H ="offene Provision" ) In Zelle H2 steht die offene Provision die sich aus A2-G2 ergibt.

(Spalte I = "Gebucht?" ) sind die Checkboxen

(Spalte J = "gebuchte Provision" )In J2 wird dann der Wert aus H2 nach dem checken
eingetragen.

Ich fand keine andere Lösung als jede einzelne Zeile zu checken.

VG. Franky1966

Beverly
08.06.2016, 07:58
Hi Franky,

dann hast du es ja noch einfacher: alle CheckBoxen haben die Eigenschaft LinkedCell - weise dieser Eigenschaft die jeweilige Zelle zu. Sobald die CheckBox aktiviert ist, steht in der Zelle "WAHR". Per Formel kannst du unter Bezug auf den Inhalt der LinkedCell deine restlichen Zellen füllen.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Franky1966
08.06.2016, 19:01
Hallo Karin,
hat gut funktioniert!!! Danke!!!

Eine Frage habe ich aber noch!

Wie lautet für diese Exelformel der Vba Code.

=SUMMEWENNS(Kassenbuch!N:N;Kassenbuch!O:O;Stammdaten!AH5;Kassenbuch!P:P;Stammdat en!$AI$5;Kassenbuch!E:E;Stammdaten!$C$5)

Die Formel steht in (2016!C41) und trägt die Summen von Kassenbuch!N:N ein wenn O:O= Januar und P:P= 2016
( " C42) Ergebnis Februar 2016


Ab Stammdaten!AH5 - AH16 stehen die Monate also Januar - Dezember als Text und Stammdaten!AI5 -AI16 stehen die Jahre 2016 - 2027 als Text.

Formel in AH5 = TEXT(P5;"MMMM") kopiert bis Dezember also =TEXT(P16;"MMMM")
Das gleiche habe mich den Jahren gemacht =TEXT(P5;(" JJJJ"))

In Stammdaten! C5:C17 stehen die verschiedenen Produkte die auch separat gewertet werden.
Liebe Grüße
Franky1966

Beverly
08.06.2016, 19:37
Hi Franky,

weshalb willst du die Formel per VBA? Aus welchem Grund stehen die Jahre als Text in den Zellen?

So richtig verstehe ich nicht, was du da machen willst.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Franky1966
08.06.2016, 19:58
Zur Frage 1, weil ich so wenig wie möglich Formeln in den Tabellen haben möchte.

Zur Frage 2, in einer Spalte steht das genaue Beginndatum als Datum formatiert. In Zwei anderen Spalten benötige ich nur den Beginmonat und in der anderen nur das Jahr.

Warum das alles so sein muss hängt mit dem komplizierten Vergütungssystem zusammen je nach Beginn eines Vertrages ändern sich die variabelen Provisionen und je nach Sparte auch die festen.

Des weiteren werden die Werte ja von einer User Form (Eingabemaske) in die Spalten übertragen und nach dem Klick auf übernehmen soll allen Berechnungen erledigt sein. Klappt ja auch alles, mir fehlt nur noch der Vba Code für Summewenns.

Beverly
09.06.2016, 07:32
Weshalb du den Monat als Text in der Zelle haben möchtest, kann ich noch verstehen - aber das Jahr...? Das Jahr aus einem Datum extrahieren kann man doch einfach mittels JAHR(A1) und es steht als Zahl in der Zelle, was auch keinen negativen Einfluss auf Berechnungen hat.

Es geht also darum, dass du das Formelergebnis berechnen willst und nicht die Formel als VBA-Code benötigst (ungetestet da die Mappe nicht vorliegt):

Evaluate("SUMIFS(Kassenbuch!N:N,Kassenbuch!O:O,Stammdaten!AH5,Kassenbuch!P:P,Stammdaten!$A I$5,Kassenbuch!E:E,Stammdaten!$C$5)")

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Franky1966
12.06.2016, 18:56
Hallo Karin,

dir zu erklären warum ich das so machen möchte führt zu weit, ich kann dir gerne mal per Mail die ganze Datei senden.

Meine Bitte ist eigentlich nur folgendes.

Wie lautet für diese Exelformel der Vba Code.

Die Formel steht in (2016!C41) =SUMMEWENNS(Kassenbuch!N:N;Kassenbuch!O:O;Stammdaten!AH5;Kassenbuch!P:P;Stammdat en!$AI$5;Kassenbuch!E:E;Stammdaten!$C$5)

Wäre schön wenn du mir dabei helfen könntest.

VG Franky1966

Beverly
12.06.2016, 19:40
Hi Franky,

das habe ich doch bereits geschrieben - mit dem geposteten Code wird das Formelergebnis berechnet.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

R J
12.06.2016, 19:41
Hi Franky,

ich bin zwar nicht Karin, aber wenn die Formel statisch bleiben kann, dann geht das in VBA so:

Worksheets("2016").cells(41,3).FormulaLocal = "=SUMMEWENNS(Kassenbuch!N:N;Kassenbuch!O:O;Stammdaten!AH5;Kassenbuch!P:P;Stammdat en!$AI$5;Kassenbuch!E:E;Stammdaten!$C$5)"

Beverly
12.06.2016, 20:04
Hi Ralf,

...weil ich so wenig wie möglich Formeln in den Tabellen haben möchte.



Dein Vorschlag widerspricht aber dieser Aussage des TO.

Ich habe sein Anliegen so verstanden, dass er nicht die Formel an sich ins Tabellenblatt schreiben sondern die Formel sozusagen mit VBA "umsetzen", also das Ergebnis in die Zelle schreiben will - und genau das macht Evaluate.


<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

R J
13.06.2016, 08:34
@Karin,


ich habe mich auch nicht auf diese weil ich so wenig wie möglich Formeln in den Tabellen haben möchte. Aussage sondern auf diese
Wie lautet für diese Exelformel der Vba Code.
Frage bezogen.
Das, was Ihr schon besprochen hattet war für diese konkrete Frage irrelevant...

Beverly
13.06.2016, 09:05
Hi Ralf,

ich will ja nicht streiten ;) und letztendlich muss das der TO entscheiden, aber so wie ich es sehe ging es nicht darum, die Formel in eine/mehrere Zelle(n) zu schreiben sondern das Ergebnis zu erhalten (wie schon geschrieben) - er hat sich m.E. nur unglücklich ausgedrückt.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

R J
13.06.2016, 09:46
Hi Karin,

ich will ja nicht streiten

dazu sage ich dann immer, dann lass es doch...:D

Franky1966
13.06.2016, 16:47
Hallo Karin und allen die mir sonst noch helfen!

Ich glaube heute wird mein Problem gelöst!

Also der Vorschlag von Karin ist:
Evaluate("SUMIFS(Kassenbuch!N:N,Kassenbuch!O:O,Stammdaten!AH5,Kassenbuch!P:P,Stammdaten!$A I$5,Kassenbuch!E:E,Stammdaten!$C$5)")

Da fehlt mir die Info wie ich den berechneten Wert in die gewünschte Zelle bekomme. Also 2016!c41=?

Der Vorschlag von Ralf:
Worksheets("2016").cells(41,3).FormulaLocal = "=SUMMEWENNS(Kassenbuch!N:N;Kassenbuch!O:O;Stammdaten!AH5;Kassenbuch!P:P;Stammdat en!$AI$5;Kassenbuch!E:E;Stammdaten!$C$5)"

Macht genau was Karin sagt er trägt die Formel ein"das will ich ja vermeiden".

Dann habe ich mir noch folgenden Code aus dem Netz kopiert:
Dim n
Dim Summe
For n = 2 To Cells(Rows.Count, 14).End(xlUp).Row
If Cells(n, 15) = Tabelle1.Range("AH5") And Cells(n, 16) = Tabelle1.Range("AI5") Then
Summe = Summe + Cells(n, 14)
End If
Next
Worksheets("2016").Range("C41") = Summe + Cells(n, 14)

Der funktioniert prima, aber! Er addiert den zuletzt eingegeben Wert immer erst bei der nächsten Eingabe somit fehlt mir in der Summe immer ein Wert.

Noch mal Dank an alle von mir genervten.

Beverly
13.06.2016, 17:00
Hi Franky,


Also der Vorschlag von Karin ist:
Evaluate("SUMIFS(Kassenbuch!N:N,Kassenbuch!O:O,Stammdaten!AH5,Kassenbuch!P:P,Stammdaten!$A I$5,Kassenbuch!E:E,Stammdaten!$C$5)")

Da fehlt mir die Info wie ich den berechneten Wert in die gewünschte Zelle bekomme. Also 2016!c41=?




Wie bekommt man denn einen Wert in eine bestimmte Zelle eines bestimmten Tabellenblattes... ;) ?

Worksheets("2016").Range("C41") = Evaluate(....)

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Franky1966
13.06.2016, 17:09
Hi Karin ,

da passiert das selbe wie bei dem zuletzt erwähnten Code. Die Addition hängt eine Eingabe hinterher.

Also wenn ich 10 Eingaben gemacht habe werden 9 Zahlen addiert, bei der 11 Eingabe wird dann der 10 Wert dazu addiert.

Liegt das daran, dass erst ab Zeile 3 die Berechnungsgrundlagen stehen?

Gruß Frank

Beverly
13.06.2016, 18:52
Hi Frank,

was wann bei dir berechnet wird kann ich nicht nachvollziehen, da mir die Mappe nicht vorliegt und ich deinen betreffenden Code nicht kenne.

Wenn ich in meiner Mappe mittels Evaluate etwas berechne, dann nimmt er alle vorhandenen Daten und lässt keine aus.

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>

Franky1966
14.06.2016, 09:42
Hallo Karin,

heut Nacht hat's klick gemacht!!!!!!!!!:p

Ich hatte den Code im "Private Sub cmdEingabe_Click()" an der falschen Stelle Eingetragen! So hat er zu erst berechnet und dann die Werte übertragen.

Worksheets("Tabelle1").Range("C4") = Evaluate("SUMIFS(Eingabe!H:H,Eingabe!J:J,Tabelle1!A1,Eingabe!K:K,Tabelle1!A2,Eingabe!D:D,T abelle1!A3)")

'Nettobeitrag in erste freie Zelle übertragen
Cells(letzte_Zeile, 8) = curNetto

'Eintrag aus Beginndatum in erste freie Zelle übertragen
Cells(letzte_Zeile, 10) = txtBeginnmonat

'Eintrag aus Beginnmonat in erste freie Zelle übertragen
Cells(letzte_Zeile, 11) = CDbl(txtBeginnjahr)



Jetzt habe ich den Code Evaluate(... unter den für die Übertragung ins Tabellenblatt eingefügt. Das Klappt!!!

'Berechnung Nettobeitrag
curNetto = CCur(txtBruttobeitrag) / (100 + CDbl(txtSteuersatz)) * (100)

'Nettobeitrag in erste freie Zelle übertragen
Cells(letzte_Zeile, 8) = curNetto

'Eintrag aus Beginndatum in erste freie Zelle übertragen
Cells(letzte_Zeile, 10) = txtBeginnmonat

'Eintrag aus Beginnmonat in erste freie Zelle übertragen
Cells(letzte_Zeile, 11) = CDbl(txtBeginnjahr)

Worksheets("Tabelle1").Range("C4") = Evaluate("SUMIFS(Eingabe!H:H,Eingabe!J:J,Tabelle1!A1,Eingabe!K:K,Tabelle1!A2,Eingabe!D:D,T abelle1!A3)")

Tja! Auch ein Computer kann nur mit Werten rechnen die da sind.:mrcool:


VG Franky.

Beverly
14.06.2016, 09:56
Hi Frank,


Tja! Auch ein Computer kann nur mit Werten rechnen die da sind.:mrcool:



Genau das war mein Gedanke, dass du die Berechnung an die falsche Stelle im Code geschrieben hast (aber da ich ihn nicht kannte, konnte ich nur raten) - deshalb mein Hinweis, dass er alle vorhandenen Daten in die Berechnung einbezieht ;) .

<hr width="20%" align="left"><img src="http://excel-inn.de/images/grusz.gif" height=35" align="left" alt="Grußformel"><a href="http://excel-inn.de/"><img border="0" src="http://excel-inn.de/images/logo1.gif" height=35" align="middle" alt="Beverly's Excel - Inn"></a>