Überstunden von einem Arbeitsblatt in ein anderes übertragen
#21
Hallo Edgar,

danke sieht toll aus.

Wie sieht jetzt die Funktion aus im Bezug auf Übertragen der Stunden eines Tages (welche Zelle muss ich markieren um dann Makro Überstunden speichern auszuführen) aus. Tue mir schwer dies im Makro auszulesen :17: Sorry.

Ach ja die Funktion dass die ZK Automatisch als neues ABl. gespeichert wird, würde ich dich bitten diese Funktion zu deaktivieren (--) das es im Makro aber erhalten/lesbar bleibt und ich bei Bedarf diese wieder aktivieren kann.  

Danke Holger


Wow wenn dass funktioniert würde ich dich gerne umarmen und Danke sagen!!
Top
#22
Hallo,


1. Set rng = Union(wksQ.Range("D16:D31"), wksQ.Range("N16:N30"))
2. Vor all diese Zeilen ein Hochkomma setzen:


Code:
For Blatt = 1 To Sheets.Count
        If Sheets(Blatt).Name = strArchiv Then IstDa = True
    Next
    If Not IstDa Then
        wksQ.Copy after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "Stunden_" & Format(.Range("P10") * 29, "MMM")
        With Sheets(Sheets.Count).UsedRange
            .Value = .Value
        End With
    Else
        .Range("B16:U31").Copy
        Sheets(Sheets.Count).Range("B16").PasteSpecial xlPasteValues
    End If
        With Sheets(Sheets.Count).UsedRange
            .Value = .Value
        End With
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#23
Hallo Edgar,

WOW WOW WOW, funktioniert bis auf einen kleinen Fehler super!!!
Bei den Überstunden beginnt er beim Eintragen bei der Spalte B6 statt B7 wodurch vermutlich auch die Formatierung nicht stimmt und auch am Ende nicht die Std zusammengerechnet werden.

Kannst du diese noch ändern, dass er mit Befüllung erst bei B7 anfängt und nochmal hier veröffentlichen?
[
Bild bitte so als Datei hochladen: Klick mich!
]

Danke
Top
#24
Hallo,

das Makro trägt in der ersten leeren Zeile ein. Warum das ein Problem beim Format sein soll, verstehe ich nicht. Deine Formel fängt allerdings erst in Zeile 7 an zu rechnen.


Code:
loletzte = Application.Max(wksZ.Cells(Rows.Count, 2).End(xlUp).Row + 1, 7)

Und jetzt befasse Dich mal mit VBA! Lasse den Code im Einzelschritt-Modus laufen, dann kannst Du nachvollziehen, was er macht.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#25
(23.03.2016, 15:06)BoskoBiati schrieb: Hallo,

das Makro trägt in der ersten leeren Zeile ein. Warum das ein Problem beim Format sein soll, verstehe ich nicht. Deine Formel fängt allerdings erst in Zeile 7 an zu rechnen.


Code:
loletzte = Application.Max(wksZ.Cells(Rows.Count, 2).End(xlUp).Row + 1, 7)

Und jetzt befasse Dich mal mit VBA! Lasse den Code im Einzelschritt-Modus laufen, dann kannst Du nachvollziehen, was er macht.

Hallo Edgar,

habe es schon gelöst! Danke
Ja ich werde mir den VBA zu Gemüte führen ::) und die einzelnen Schritte nachverfolgen!!

Abschließend bleibt mir nur mehr DANKE zu sagen, für deine Hilfe und die aufgewendete Zeit.
Du hast mir dadurch sehr weiter geholfen u. stehe quasi in deiner Schuld.

Danke Danke
Erika

PS: Ich hoffe ich darf mich wieder einmal an dich wenden wenn ich Fragen habe, welche hoffentlich nicht so umfangreich sind!!
Top
#26
Hallo Edgar,

habe eine Frage da zu VBA da ich einen Wert nicht finden kann!

Für 80 Prozent der Mitarbeiter passt diese ZK super, jedoch haben wir auch MA die 41Std arbeiten und daher Montag u. Dienstag erst von 16:30 Überstunden schreiben können.
Deshalb habe ich zweite Schaltfläche gemacht und die Werte zu ändern versucht (kopiertes Makro) auf 16:30.
Für die Darstellung in der ZK klappt es super nur beim Übertrag nimmt er noch immer 16:00.

 rngAktiv.Offset(0, 2) = "16:30"

Wo muss ich hier noch den Eintrag im Makro ändern damit auch bei Beginn Überstunde 16:30 übertragen wird?

Code:
Sub Stunden_speichern()
Dim loletzte As Long
Dim loSp As Long
Dim loZe As Long
Dim IstDa As Boolean
Dim rngAktiv As Range
Dim rng As Range
Dim rng2 As Range
Dim Blatt As Long
Dim strArchiv As String
Dim wksQ As Worksheet
Dim wksZ As Worksheet
Set wksQ = Sheets("ZK")
Set wksZ = Sheets("MDL")
IstDa = False
Set rng = Union(wksQ.Range("D16:D31"), wksQ.Range("N16:N30"))
loletzte = wksZ.Cells(Rows.Count, 2).End(xlUp).Row + 1
Set rngAktiv = ActiveCell
If rngAktiv.Count > 1 Then Exit Sub
If Application.Intersect(rngAktiv, rng) Is Nothing Then Exit Sub
If Not wksZ.Columns(2).Find(rngAktiv.Offset(0, -1).Value + 2 / 3) Is Nothing Then
    MsgBox "Der Wert wurden bereits gespeichert!", vbOKOnly, "Achtung"
    Exit Sub
End If
Application.ScreenUpdating = False
With wksQ
                wksZ.Cells(loletzte, 2) = rngAktiv.Offset(0, -1) + 2 / 3
                wksZ.Cells(loletzte, 4) = rngAktiv.Offset(0, -1) + rngAktiv.Offset(0, 2)
                wksZ.Cells(loletzte, 6) = Format((rngAktiv.Offset(0, 4) + rngAktiv.Offset(0, 5) / 60) / 24, "hh:mm")
                strArchiv = "Stunden_" & Format(.Range("P10") * 29, "MMM")
                rngAktiv.Offset(0, 2) = "16:30"
                Debug.Print strArchiv
    For Blatt = 1 To Sheets.Count
        If Sheets(Blatt).Name = strArchiv Then IstDa = True
    Next
    If Not IstDa Then
        wksQ.Copy after:=Sheets(Sheets.Count)
        Sheets(Sheets.Count).Name = "Stunden_" & Format(.Range("P10") * 29, "MMM")
        With Sheets(Sheets.Count).UsedRange
            .Value = .Value
        End With
    Else
        .Range("B16:U31").Copy
        Sheets(Sheets.Count).Range("B16").PasteSpecial xlPasteValues
    End If
        With Sheets(Sheets.Count).UsedRange
            .Value = .Value
        End With
End With
Application.ScreenUpdating = True
End Sub

Danke und nochmal Sorry dass ich dich schon wieder belästige!!

Erika

PS: auch sollen die Mitarbeiter durch einen andere Schaltfläche die Möglichkeit bekommen von frühestens 06:00 bis max 08:00 (z.B. 06:30-08:00; 06:45-08:00; 07:30-08:00 Überstunden schreiben zu können.
kann ich dieses auch mit deinem Makro umsetzen?
Top
#27
Hallo,

diese Zeile:


Code:
wksZ.Cells(loletzte, 2) = rngAktiv.Offset(0, -1) + 2 / 3


ersetzen durch diese:


Code:
wksZ.Cells(loletzte, 2) = rngAktiv.Offset(0, -1) +33/48
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
[-] Folgende(r) 1 Nutzer sagt Danke an BoskoBiati für diesen Beitrag:
  • Erika
Top
#28
Super funktioniert!!
Oh Mann o Mann wenn ich dich nicht hätte!

Das mit den Überstunden in der früh sollte auch so funktionieren wenn ich dein Makro kopiere und Spalten sowie Werte ersetze oder?


Danke Erika

Angel


Zitat:Hallo,

diese Zeile:
Code:
wksZ.Cells(loletzte, 2) = rngAktiv.Offset(0, -1) + 2 / 3

ersetzen durch diese:
Code:
wksZ.Cells(loletzte, 2) = rngAktiv.Offset(0, -1) +33/48
Top
#29
Hallo,



Zitat:Das mit den Überstunden in der früh sollte auch so funktionieren

nein! Ich ahnte es, dass es sowas auch gibt. Da muß das ganze Makro anders aufgebaut werden.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Top
#30
(24.03.2016, 09:49)BoskoBiati schrieb: nein! Ich ahnte es, dass es sowas auch gibt. Da muß das ganze Makro anders aufgebaut werden.

Hallo Edgar,

Sorry, sorry! Also wenn ich jetzt nur Einträge mache von 16:00 oder 16:30 bis Ende funktioniert es tadellos. Doch sobald ich einen Wert in der Früh auch dazu gebe, wird dieser mitgerechnet. Deshalb will ich ja zu den bereits zwei Schaltflächen eine dritte die nur die Zeiten von 06:00 - 08:00 sofern erwünscht als Überstunde überträgt
Zusammengefasst:
1 Schaltfläche von 16:00 - Ende Überstunde  
2 Schaltfläche von 16:30 - Ende Überstunde
3 Schaltfläche von 06:00 - 08:00 (ab 06:00 ist Überstunde möglich bis max. 08:00)

Tut mir leid ich dachte es funktioniert einfach mit dem kopieren des Makros und Werte ändern.
Wusste nicht dass es sich auf die Anfangsuhrzeit auch bezieht.
Hoffe es gibt eine Lösung dafür und du bist ein letztes mal in dieser Sache motiviert?

Vielen Dank im Voraus Erika
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste