Registriert seit: 30.03.2018
Version(en): 16.11
Hallo zusammen,
da ich momemtan bei einer Änderung durch das Worksheet_Change-Ereignis die komplette Tabelle neu berechne, möchte ich die Berechnungen durch zeilenweise Berechnungen ersetzen.
Dabei möchte ich, dass verschiende Unterprogramme nur ausgeführt werden, wenn die Spalten 14, 16 bzw. 20 bis 25 geändert werden. Ich habe es mit Worksheet.Calculate versucht, habe jedoch dabei einen Fehler den ich gerade nicht finde, da zur Zeit die Tabelle und nicht lediglich wie gewünscht die geänderte Zeile berechnet wird.
Code:
Sub Worksheet_Change(ByVal Target As Range)
Dim Zeile, Spalte As Integer
Zeile = Target.row
Spalte = Target.Column
'MsgBox "Zeile: " & Zeile & " Spalte: " & Spalte
Select Case Spalte
Case 14, 16, 20 To 25
Worksheets("Gehaltsdaten").Rows(Target.row).Calculate
Summe
LBProzentBerechnen
EGGehalt
LBBerechnen
irwazBerechnen
MEKhBerechnen
JEK
DeltaMEK35berechnen
DeltaMEKIrwazberechnen
DeltaMEKProzent
End Select
End Sub
in über jeden Hinweis dankbar :)
Registriert seit: 13.04.2014
Version(en): 365
Hi,
erst einmal stimmt die Dimensionierung nicht. Dann ist die Frage, was berechnen denn die ganzen Subs, die Du aufrufst?
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 21.06.2016
Version(en): 2021
23.08.2018, 15:25
(Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2018, 15:25 von Ego.)
Hallo J...,
nimm:
"If Not (Intersect(Target, Range("14:14,16:16,20:25")) Is Nothing) Then"
ps. Im Worksheet Change Ereignis kann das Target mehr als ein Zelle beinhalten. Mit Target.Row bekommst du nur die erste Zeile.
helmut
Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.
Registriert seit: 13.04.2014
Version(en): 365
Hi,
die Auswahl mehrerer Zellen sollte man unterbinden:
If Target.Count>1 then exit sub
Es ist aber immer noch offen, was für Berechnungen die ganzen Subs starten!
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
23.08.2018, 16:25
(Dieser Beitrag wurde zuletzt bearbeitet: 23.08.2018, 16:51 von Käpt'n Blaubär.)
Hallo,
Edgar hat Dich schon darauf aufmerksam gemacht:
Die Dimensionierungen stimmen nicht !Zitat:Dim Zeile, Spalte As Integer 'das ist Deine uns vorgestellte Codezeile
was da steht, heißt aber im Klartext:
Dim Zeile as Variant, Spalte As Integer 'was Du garantiert nicht so bestimmen wolltest
richtig wäre:
Dim Zeile as Integer, Spalte As Integer 'wobei heutzutage fast niemand mehr "Integer"
'sondern "Long" benutzt
Registriert seit: 30.03.2018
Version(en): 16.11
Vielen Dank schon mal euch allen. Die Dimensionierung war ein Fehler von mir, wollte für Zeile auch Integer übernehmen und habe es falsch geschrieben. Werde in Zukunft auch mit Long arbeiten :)
Die Subs besitzen die gleiche Struktur, wesehalb ich mal einen beispielhaft hier reinsetze:
Code:
Sub LBProzentBerechnen()
Dim Zeile As Integer
Zeile = 3
Set book = ActiveWorkbook
With book.Worksheets("Gehaltsdaten")
While (.Cells(Zeile, 1) <> "")
If (.Cells(Zeile, 25) = "") Then
.Cells(Zeile, 18).Value = Cells(Zeile, 19) * 1.0714
Else
.Cells(Zeile, 18).Value = Cells(Zeile, 19) * 0.9375
End If
.Cells(Zeile, 18).NumberFormat = ("0.00")
Zeile = Zeile + 1
Wend
End With
End Sub
Im Grunde genommen will ich durch das Verändern der Werte in den Spalten 14 (Arbeitstunden pro Woche), 16 (EG-Stufe) oder der Spalten 20 - 25 Mitarbeiterbewertungen Berechnungen auslösen. Hier im obigen Code soll beispielsweise ein Prozentsatz berechnet werden, der davon abhängt ob der MA eben einen Wert hat oder nicht in Spalte 25.
Der Hinweis, dass jeweils nur eine Zeile ausgeführt wird ist gut, danke.
@Ego ist Target.Row dann auch die erste geänderte Zeile, die das Worksheet-Ereignis erkennt ?
Registriert seit: 13.04.2014
Version(en): 365
Hi,
der Beispielcode durchläuft z.B. das ganze Blatt! Wahrscheinlich machen das die anderen Codes auch.......
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 30.03.2018
Version(en): 16.11
Sprich, in der Form ist es unmöglich nur eine bestimmte Zeile anzusprechen?
Ja, ich druchlaufe bei den anderen Codes auch mit einer While-Schleife.
Registriert seit: 13.04.2014
Version(en): 365
Hi,
wenn Du alle die Unterroutinen startest, dann wird eben x-mal die gesamte Tabelle berechnet. Da Deine Pläne und Gedankengänge hier nicht deutlich ersichtlich sind, ist es schwer dabei zu helfen.
Gruß
Edgar
Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Registriert seit: 21.12.2017
Version(en): MS 365 Family (6 User x 5 Geräte für jeden) Insider-Beta
24.08.2018, 10:45
(Dieser Beitrag wurde zuletzt bearbeitet: 24.08.2018, 10:46 von LCohen.)
Am schnellsten geht Kalkulation manuell und Neuzuweisung der fraglichen Formeln in persönlich gewollter Reihenfolge. Dann hat man aber auch sein Modell intellektuell im Griff.
Mit einem Makro-Shortcut könnte man Kalkulation automatisch ein- und sofort wieder ausschalten. Evtl. noch mit "Sind Sie sicher?", falls das über 20 Sekunden dauert.
Dann hast Du eine echte Highspeed-Anwendung.