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

WochenSollstunden (@ErichG)

WochenSollstunden (@ErichG)
Uwe
Hallo zusammen, hallo Erich...
vor längerer Zeit habe ich von Dir, Erich, das unten aufgeführte Makro bekommen, das, für sich betrachtet, richtig gut funktioniert. Es dient mir dazu, vorgegebene Wochenstunden in dafür eigens verbundene Zellen zusammenzurechen und auszugeben. So weit, so gut...
Zwingend kommt allerdings nun noch eine Bedingung hinzu, die einfach nicht funktionieren will. Dem ersten Wert (iStart), also dem Wert in den ersten verbundenen Zellen in Spalte C soll stets der Wert aus Zelle C8, also (8, 3) hinzugerechnet werden. Und dies ohne weitere Bedingung(en). Was "läuft" da falsch?
Ich gehe einfach davon aus, das der betreffende Ausdruck falsch ist oder nur an falscher Stelle steht...
Besten Dank für `nen sachdienlichen Hinweis...
Uwe
Hier einfach mal der Code:

Sub Soll_TVöD(wks As Worksheet, iStart As Long, iEnde As Long)
Dim i As Integer, rngC As Range, sngSum As Single
Dim arrZeit
arrZeit = Array(8, 8, 8, 8, 7, 0, 0)
With wks
Set rngC = .Cells(iStart, 3).MergeArea
If iStart = 5 Then sngSum = .Cells(8, 3)
For i = iStart To iEnde
sngSum = sngSum + arrZeit(Weekday(.Cells(i, 1), vbMonday) - 1) / 24 - .Cells(i, 11) - .Cells(i,  _
13)
If Weekday(.Cells(i, 1), vbMonday) = 7 Or i = iEnde Then
rngC = sngSum
If i  iEnde Then sngSum = 0
Set rngC = .Cells(i + 1, 3).MergeArea
End If
Next i
End With
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Rückfrage
24.09.2009 19:57:09
Erich
Hi Uwe,
so ohne Beispieltabelle/-mappe ist kaum zu verstehen, was da läuft.
Wesentlich ist ja auch, mit welchen Parametern die Routine aufgerufen wird.
C8 wird bisher zu Beginn in die Summe geschrieben, wenn das Makro mit Parameter iStart = 5 aufgerufen wird.
Vielleicht reicht es aus, wenn du aus der Zeile
If iStart = 5 Then sngSum = .Cells(8, 3)
die neue Zeile
sngSum = .Cells(8, 3)
machst.
Der Code sieht nur zum kleineren Teil nach meinem VBA-Stil aus.
Wann hast du den bekommen? Ein Datum oder ein Link zum Archivbeitrag wären gut, auch zum Verstehen.
(Ich habs nicht gefunden im Archiv.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort nach Kleve
Anzeige
AW: Rückfrage
25.09.2009 09:36:18
Uwe
Guten Morgen Erich!
Rückmeldung ist doch selbstverständlich.... Nun denn, der ursprüngliche Code stammt in der Tat von Dir. Dieser nun wieder ist etwa zwei oder drei Jahre alt. Na, wie dem auch sei. Die Tage über hatte ich einfach Probleme damit, eine Datei zum Server hochzuladen. Das sollte jetzt funktionieren. Die Datei beinhaltet derzeit drei Blätter. In Zelle A1 des Blattes Zeitdaten (gelb) gebe ich einen Monat vor. (z.B. 01.09.09) Automatisch passen sich dann bereits die Blätter TVöD bzw. TVL an. Ebenso funktioniert das Verbinden diverser Zellen pro Kalenderwoche prima. Nun das "Problem" bisher: In beiden Blättern, sprich TVöD und TVL soll jeweils der Wert aus Zelle C8 (rot) dem Wert in "iStart" (grün) hinzugerechnet werden. Und zwar dann, sobald ich in C8 (rot) einen Wert eintrage.
Das klappt bisher nicht. Die Datei dazu: https://www.herber.de/bbs/user/64688.zip
Wäre nett, wenn Du mir behilflich sein könntest.
Besten Dank im Voraus.
Uwe
PS: Die hinterlegten Farben habe ich nur dem besseren Verständnis wegen so festgelegt.
PPS: Wie bereits beschrieben, hab ich noch einige wenige andere "Probleme". Zu denen bei Gelegenheit mehr. Wär das o.k.?
Anzeige
Einige Bemerkungen
26.09.2009 10:52:22
Erich
Hi Uwe,
einige Bemerkungen zu deinem Code:
1.
In Soll_TVL steht
If iStart = 9 Then sngSum = .Cells(7, 3)
In Soll_TVöD steht
If iStart = 5 Then sngSum = .Cells(8, 3)
Sollte in beiden Makros nicht das Folgende stehen?
If iStart = 9 Then sngSum = .Cells(8, 3)
Der Aufbau der beiden Tabellen ist doch (in dieser Gegend) identisch, oder?
2.
Die Abweichung kann nur zustande kommen dadurch, dass du identischen oder fast identischen Code
doppelt programmierst.
Der einzige Unterschied zwischen Soll_TVL und Soll_TVöD besteht wohl darin, dass beim Sollstunden-Array
einmal 8, einmal 7.5 steht.
"Tagesgesamtstunden" und "Urlaub" sind völlig identisch. Warum dann zwei Makros?
3.
In Workbook_SheetChange steht

Select Case Target.Column
Case 11, 13
Soll_TVöD sh, iStart, iEnde
End Select
(analog auch für TVL). Soll_TVöD wird also nur dann gestartet, wenn sich in Spalte 11 oder 13
(K oder M) etwas ändert. Änderungen in C8 haben keinen Effekt.
Eine Möglichkeit, das einzurichten:

Select Case Target.Column
Case 3:      If Target.Row = 8 Then Soll_TVöD sh, iStart, iEnde
Case 11, 13:                        Soll_TVöD sh, iStart, iEnde
End Select
4.
Warum willst du alles in VBA machen? Bei Formeln in den Tabellen würde Excel automatisch für die Aktualisierung sorgen.
5.
Du solltest dir angewöhnen, jedes VBA-Modul mit Option Explicit zu beginnen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Die Rückmeldung
27.09.2009 10:20:03
Uwe
Guten Morgen Erich!
Zu Punkt 1 hast mich "erwischt". Da hatte sich schlicht ein Schreibfehler eingeschlichen. Besten Dank für den Hinweis.
Der Punkt 2 liegt zum Teil an den festgeschriebenen, dennoch aber flexibelen Vorgaben im diesgezüglichen Tarifrecht. Zur Zeit sind die von Dir angesprochenen Makros wahrlich nahezu identisch. Dennoch habe ich in der Vergagenheit juristische Entscheidungen miterlebt, die "mal eben", von heute auf morgen gesamte Verfahrensweisen auf den Kopf gestellt haben. Daher diese strikte Trennung von Beginn an.
Punkt 3 geändert hat zur Folge, das gleich nach der Eingabe C8 wieder "bereinigt", sprich der Zellinhalt auf 0 gesetzt wird. Da liegt der Fehler wohl woanders?
Zum Punkt 4 habe ich ganz konkrete Vorgaben, bzw. ich selber eine gewisse Erwartungshaltung an meine Arbeit. Die Vorgabe heißt schlicht KLEINE Formeln, Funktionen nur innerhalb VBA. Geschütze Formeln wurden in der Vergangenheit schon "geknackt" und gelöscht/verändert. Formeln darüber hinaus anzupassen ist bei der Vielfalt (Tabellenblätter für später etwa 275 Mitarbeiter) erscheint mir naherzu unmöglich. Ein, zwei Module hingegen auszutauschen... irgendwie einfacher.
Den Punkt 5 gestehe ich freiwillig. Recht hast Du. Ich lerne gerade bei diesem Projekt jetzt sehr schnell dazu. Also "Option Explicit" ist verstanden.
Alles in allem fehlt mir immer noch Basiswissen. Auch das aber gibt sich zur Zeit. Habe da einige gute Infos bekommen.
Lange Rede kurzer Sinn. Zur Zeit bin ich dabei dem gesamten Projekt den endgültigen Schliff zu geben. Inzwischen steht fest, das mit einer "Basisversion" gestartet wird, die später mehr und mehr auszubauen ist. So diese Vorarbeit nun erledigt ist, die Dateistrucktur steht, melde ich mich bezüglich
der "Restarbeiten" wieder.
Besten dank für Deine Hilfe
Bis dahin
Uwe
Anzeige
Danke für Rückmeldung - und eine Korrektur
27.09.2009 10:48:18
Erich
Hi Uwe,
deine Bemerkung
Punkt 3 geändert hat zur Folge, das gleich nach der Eingabe C8 wieder "bereinigt", sprich der Zellinhalt auf 0 gesetzt wird
habe ich zunächst nicht verstanden, dann aber doch gesehen, dass ich mich bei meinem Vorschlag
überhaupt nicht um die Parameter iStart und iEnde gekümmert habe.
Probier mal in Workbook_SheetChange:

Select Case Target.Column
Case 3
If Target.Row = 8 Then Soll_TVöD sh, 9, 8 + Cells(9, 3).MergeArea.Rows.Count
Case 11, 13:              Soll_TVöD sh, iStart, iEnde
End Select
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Danke für Rückmeldung - und eine Korrektur
27.09.2009 12:50:42
Uwe
Hallo Erich!
DAS war die Lösung!!! Entdeckt, mir gedacht hatte ich`s vorhin schon mal. War aber dann doch nicht in der Lage, das Problem zu bereinigen.
Wie gesagt, bin gerade dabei mein "Vorhaben" nunmehr auf eine solide Grundlage zu stellen, um es anschließend Schritt für Schritt ausbauen zu können.
Ich meld mich nun aber erst die Tage über zu den anderen, bisher hartnäckigen Problemchen...
Besten Dank für Deine Lösung. Hierdurch ist weit mehr als die Hälfte des Gesamtprojektes schon geschafft. Es fehlt "nur" noch die Gegenüberstellung der nun fertigen WochenSollstunden mit dem Ist und (leider) dann noch ne irre Schwiergkeit, die sich aus dem Soll-Ist Vergleich ergibt.
Grüße aus dem sonnigen Kleve
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige