Re: Stundenerfassen Baugewerbe
06.07.2002 20:41:27
Dieter Klemke
Hallo Olga,
ich denke, man sollte zu deinem Problem ein VBA-Programm schreiben.
Ich gehe von den folgenden Voraussetzungen aus:
Monate.xls - Arbeitsmappe mit den Monatsblättern
Baustellen.xls - Arbeitsmappe mit den Stundeninfos nach Baustellen
Das VBA-Programm ist so geschrieben, dass es in der Baustellen.xls steht.
Es könnte so aussehen:Option Explicit
Public wbM As Workbook
Sub Stunden_übernehmen()
Dim datum As Date
Dim mitarbeiter As String
Dim persnr As String
Dim stunden As Double
Dim wbB As Workbook
Dim wsB As Worksheet
Dim zeile As Long
Set wbB = ThisWorkbook
Set wbM = Workbooks("Monate.xls")
Set wsB = wbB.Worksheets(1)
wsB.Range("A1").Sort Key1:=wsB.Range("A2"), _
Key2:=wsB.Range("D2"), _
Key3:=wsB.Range("B2"), _
Header:=xlYes
zeile = 2
stunden = 0
Do Until IsEmpty(wsB.Cells(zeile, 1))
stunden = stunden + wsB.Cells(zeile, 5) ' Stunden in Sp. E
If wsB.Cells(zeile, 1) <> wsB.Cells(zeile + 1, 1) Or _
wsB.Cells(zeile, 4) <> wsB.Cells(zeile + 1, 4) Or _
wsB.Cells(zeile, 2) <> wsB.Cells(zeile + 1, 2) Then
' letzte Zeile von Mitarbeiter und Tag
mitarbeiter = wsB.Cells(zeile, 1) ' Name in Sp. A
persnr = wsB.Cells(zeile, 4) ' Personalnr. in Sp. D
datum = wsB.Cells(zeile, 2) ' Datum in Sp. B
StundenSchreiben mitarbeiter, persnr, datum, stunden
stunden = 0
End If
zeile = zeile + 1
Loop
End Sub
Sub StundenSchreiben(mitarbeiter As String, _
persnr As String, _
datum As Date, _
stunden As Double)
Dim monat As Long
Dim tag As Long
Dim wsM As Worksheet
Dim zeile As Long
monat = Month(datum)
tag = Day(datum)
Set wsM = wbM.Worksheets(monat)
zeile = 2
Do Until IsEmpty(wsM.Cells(zeile, 1))
If wsM.Cells(zeile, 1) = mitarbeiter And _
wsM.Cells(zeile, 2) = persnr Then
' Mitarbeiter gefunden
wsM.Cells(zeile, 4 + tag) = stunden
End If
zeile = zeile + 1
Loop
End Sub
Es muß aber nochmal intensiv getestet werden.
MfG
Dieter