Thema Datum  Von Nutzer Rating
Antwort
Rot letzte zeile berechnet er nicht
26.03.2008 08:57:31 daniel
NotSolved
26.03.2008 14:13:48 Holger
NotSolved
26.03.2008 14:54:45 Daniel
NotSolved

Ansicht des Beitrags:
Von:
daniel
Datum:
26.03.2008 08:57:31
Views:
1890
Rating: Antwort:
  Ja
Thema:
letzte zeile berechnet er nicht
hi ich hab n problem der folgende vba code berechnet das verbleibenden Datum anhand der verbleibenden Arbeitstage bis zum start of production. leider berchnet er mir die lletzte zeile nicht nur bis H34 und nicht bis H35 ich bin schon seit 2 Tagen am schaun und finde nicht was ich ändern soll :-(
bitte helft mir

Public Enum eFeiertage

'Entfernung der Feiertage vom Ostersonntag
Aschermittwoch = -46
Karfreitag = -2
Ostersamstag = -1
Ostersonntag = 0
Ostermontag = 1
ChristiHimmelfahrt = 39
Brueckentag_ChristiHimmelfahrt = 40
Pfingstsonntag = 49
Pfingstmontag = 50
Fronleichnam = 60
Brueckentag_Fronleichnam = 61

End Enum
Function Neujahr(ByVal Jahr) As Date
Neujahr = "01.01." & Jahr
End Function
Function HeiligDreiKoenig(ByVal Jahr) As Date
HeiligDreiKoenig = "06.01." & Jahr
End Function
Function TagDerArbeit(ByVal Jahr) As Date
TagDerArbeit = "01.05." & Jahr
End Function
Function TagDerDeutschenEinheit(ByVal Jahr) As Date
TagDerDeutschenEinheit = "03.10." & Jahr
End Function
Function Allerheiligen(ByVal Jahr) As Date
Allerheiligen = "01.11." & Jahr
End Function
Function HeiligerAbend(ByVal Jahr) As Date
HeiligerAbend = "24.12." & Jahr
End Function
Function ErsterWeihnachtstag(ByVal Jahr) As Date
ErsterWeihnachtstag = "25.12." & Jahr
End Function
Function ZweiterWeihnachtstag(ByVal Jahr) As Date
ZweiterWeihnachtstag = "26.12." & Jahr
End Function
Function Silvester(ByVal Jahr) As Date
Silvester = "31.12." & Jahr
End Function
Function myKarfreitag(ByVal Jahr) As Date
myKarfreitag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Ostersonntag) - 2
End Function
Function myOstersamstag(ByVal Jahr) As Date
myOstersamstag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Ostersonntag) - 1
End Function
Function myOstersonntag(ByVal Jahr) As Date
myOstersonntag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Ostersonntag)
End Function
Function myOstermontag(ByVal Jahr) As Date
myOstermontag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Ostersonntag) + 1
End Function
Function myChristiHimmelfahrt(ByVal Jahr) As Date
myChristiHimmelfahrt = FeiertagDatum(intJahr:=Jahr, Feiertag:=ChristiHimmelfahrt)
End Function
Function myBrueckentag_ChristiHimmelfahrt(ByVal Jahr) As Date
myBrueckentag_ChristiHimmelfahrt = FeiertagDatum(intJahr:=Jahr, Feiertag:=Brueckentag_ChristiHimmelfahrt)
End Function
Function myPfingstsamstag(ByVal Jahr) As Date
myPfingstsamstag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Pfingstsonntag) - 1
End Function
Function myPfingstsonntag(ByVal Jahr) As Date
myPfingstsonntag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Pfingstsonntag)
End Function
Function myPfingstmontag(ByVal Jahr) As Date
myPfingstmontag = FeiertagDatum(intJahr:=Jahr, Feiertag:=Pfingstsonntag) + 1
End Function
Function myFronleichnam(ByVal Jahr) As Date
myFronleichnam = FeiertagDatum(intJahr:=Jahr, Feiertag:=Fronleichnam)
End Function
Function myBrueckentag_Fronleichnam(ByVal Jahr) As Date
myBrueckentag_Fronleichnam = FeiertagDatum(intJahr:=Jahr, Feiertag:=Fronleichnam) + 1
End Function
Function d0401(ByVal Jahr) As Date
d0401 = "04.01." & Jahr
End Function
Function d0501(ByVal Jahr) As Date
d0501 = "05.01." & Jahr
End Function
Function d2704(ByVal Jahr) As Date
d2704 = "27.04." & Jahr
End Function
Function d2804(ByVal Jahr) As Date
d2804 = "28.04." & Jahr
End Function
Function d2904(ByVal Jahr) As Date
d2904 = "29.04." & Jahr
End Function
Function d3004(ByVal Jahr) As Date
d3004 = "30.04." & Jahr
End Function
Function d0205(ByVal Jahr) As Date
d0205 = "02.05." & Jahr
End Function
Function d0305(ByVal Jahr) As Date
d0305 = "03.05." & Jahr
End Function
Function d0110(ByVal Jahr) As Date
d0110 = "01.10." & Jahr
End Function
Function d0210(ByVal Jahr) As Date
d0210 = "02.10." & Jahr
End Function
Function d3010(ByVal Jahr) As Date
d3010 = "30.10." & Jahr
End Function
Function d3110(ByVal Jahr) As Date
d3110 = "31.10." & Jahr
End Function
Function d2212(ByVal Jahr) As Date
d2212 = "22.12." & Jahr
End Function
Function d2312(ByVal Jahr) As Date
d2312 = "23.12." & Jahr
End Function
Function d2912(ByVal Jahr) As Date
d2912 = "29.12." & Jahr
End Function
Function d3012(ByVal Jahr) As Date
d3012 = "30.12." & Jahr
End Function
Function Einsatztermin_pruefen(ByVal Zeile As Integer, ByVal Spalte As Integer) As Date

Dim Endtermin As Date

Endtermin = ActiveWorkbook.ActiveSheet.Cells(Zeile, Spalte).Value

'Ermittlung des neuen Endtermins, falls dieser urspruenglich auf einen Tag fiel,
'der nicht als Arbeitstag zaehlt (zum Beispiel auf einen Feiertag, Brueckentag oder
'auf das Wochenende).
Select Case Endtermin
Case Neujahr(Year(Endtermin)), HeiligDreiKoenig(Year(Endtermin)), TagDerDeutschenEinheit(Year(Endtermin)), Allerheiligen(Year(Endtermin))
If (Weekday(Endtermin) = 6)) Then
Endtermin = Endtermin + 3
ElseIf (Weekday(Endtermin) = 4) Then
Endtermin = Endtermin + 5
ElseIf (Weekday(Endtermin) = 5) Then
Endtermin = Endtermin + 4
End If
Case ErsterWeihnachtstag(Year(Endtermin))
If (Weekday(Endtermin) 31 Then
OS = OS - 31
Monat = Monat + 1
End If
FeiertagDatum = DateSerial(X, Monat, OS)
'************************************* Ende Formel *************************************'

'Bewegliche Feiertage, die berechnet werden sollen.
Select Case Feiertag
Case eFeiertage.ChristiHimmelfahrt
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.ChristiHimmelfahrt)
Case eFeiertage.Brueckentag_ChristiHimmelfahrt
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Brueckentag_ChristiHimmelfahrt)
Case eFeiertage.Fronleichnam
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Fronleichnam)
Case eFeiertage.Brueckentag_Fronleichnam
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Brueckentag_Fronleichnam)
Case eFeiertage.Ostermontag
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Ostermontag)
Case eFeiertage.Ostersonntag
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Ostersonntag)
Case eFeiertage.Pfingstsonntag
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Pfingstsonntag)
Case eFeiertage.Pfingstmontag
FeiertagDatum = DateAdd("d", FeiertagDatum, eFeiertage.Pfingstmontag)
Case Else
End Select

End Function
Sub Datum_ueberpruefen()

'* Beginn der Variablendeklaration fuer die Methode "Datum_ueberpruefen_schnelle_Version()" *'
Dim Datum As Date
Dim Endtermin As Date

Dim Liste As Collection
Set Liste = New Collection

Dim ATage As Integer 'Dient zur Ermittlung, wie hoch die groesste Anzahl an Arbeitstagen ist

Dim AfoTermin(3) As Integer 'Spalte und Zeile fuer untere und obere Grenze
Dim AT(3) As Integer 'Spalte und Zeile fuer untere und obere Grenze
Dim Auftragstermin(1) As Integer 'Spalte und Zeile fuer eine Zelle
Dim Lieferung(1) As Integer 'Spalte und Zeile fuer eine Zelle
Dim rot_faerben(1) As Integer

Dim spezielleZellen As Collection 'Collections beginnen mit Index 1!
Set spezielleZellen = New Collection

'* Ende der Variablendeklaration fuer die Methode "Datum_ueberpruefen_schnelle_Version()" **'

'*********** Beginn Prototypen-Radsaetze-spezifische Daten fuer das Excel-Sheet ************'
AfoTermin(0) = 10 'Zeile 10
AfoTermin(1) = 7 'Spalte 7
AfoTermin(2) = 27 'Zeile 27
AfoTermin(3) = 7 'Spalte 7

AT(0) = 10 'Zeile 10
AT(1) = 6 'Spalte 6
AT(2) = 27 'Zeile 27
AT(3) = 6 'Spalte 6

Auftragstermin(0) = 4 'Zeile 4
Auftragstermin(1) = 2 'Spalte 2

Lieferung(0) = 28 'Zeile 28
Lieferung(1) = 7 'Spalte 7

rot_faerben(0) = 2 'Beginnend mit zweiter Spalte
rot_faerben(1) = 3 'Enden in dritter Spalte

'Prototypen-Radsaetze in Liste hinzufuegen
spezielleZellen.Add (AfoTermin)
spezielleZellen.Add (AT)
spezielleZellen.Add (Auftragstermin)
spezielleZellen.Add (Lieferung)
spezielleZellen.Add (rot_faerben)

'************* Ende Prototypen-Radsaetze-spezifische Daten fuer das Excel-Sheet ************'

'***************** Beginn Radsaetze-spezifische Daten fuer das Excel-Sheet *****************'
AfoTermin(0) = 8
AfoTermin(1) = 8
AfoTermin(2) = 33
AfoTermin(3) = 8

AT(0) = 8
AT(1) = 7
AT(2) = 33
AT(3) = 7

Auftragstermin(0) = 4
Auftragstermin(1) = 2

Lieferung(0) = 34
Lieferung(1) = 8

rot_faerben(0) = 2 'Beginnend mit zweiter Spalte
rot_faerben(1) = 3 'Enden in dritter Spalte

'Prototypen-Radsaetze in Liste hinzufuegen
spezielleZellen.Add (AfoTermin)
spezielleZellen.Add (AT)
spezielleZellen.Add (Auftragstermin)
spezielleZellen.Add (Lieferung)
spezielleZellen.Add (rot_faerben)

'***************** Ende Radsaetze-spezifische Daten fuer das Excel-Sheet ******************'

'*********************************** Beginn Auswahl ***************************************'

Auswahl = 2 'Eingabemöglichkeiten fuer die Variable Auswahl:
'1 fuer Prototypen-Radsaetze, 2 fuer Radsaetze

AfoTermin_Auswahl = spezielleZellen.Item(Auswahl * 5 - 4)
AT_Auswahl = spezielleZellen.Item(Auswahl * 5 - 3)
Auftragstermin_Auswahl = spezielleZellen.Item(Auswahl * 5 - 2)
Lieferung_Auswahl = spezielleZellen.Item(Auswahl * 5 - 1)
rot_faerben_Auswahl = spezielleZellen.Item(Auswahl * 5)

'************************************ Ende Auswahl **************************************'

'***************************** Beginn Endtermin ueberpruefen ****************************'

ActiveWorkbook.ActiveSheet.Cells(Auftragstermin_Auswahl(0), Auftragstermin_Auswahl(1)).Value = Einsatztermin_pruefen(Auftragstermin_Auswahl(0), Auftragstermin_Auswahl(1))
ActiveWorkbook.ActiveSheet.Cells(Lieferung_Auswahl(0), Lieferung_Auswahl(1)).Value = ActiveWorkbook.ActiveSheet.Cells(Auftragstermin_Auswahl(0), Auftragstermin_Auswahl(1)).Value

'****************************** Ende Endtermin ueberpruefen *****************************'

'*************** Beginn leere Zellen in Spalte "AT" auf "Null" zu setzen ****************'

For nZahl = AfoTermin_Auswahl(0) To Lieferung_Auswahl(0)
If (IsEmpty(ActiveWorkbook.ActiveSheet.Cells(nZahl, AT_Auswahl(1)).Value) = True) Then
ActiveWorkbook.ActiveSheet.Cells(nZahl, AfoTermin_Auswahl(1)).Value = Null
End If
Next nZahl

'**************** Ende leere Zellen in Spalte "AT" auf "Null" zu setzen *****************'

'****** Beginn hoechste Anzahl an Arbeitstagen aus Excel-Spalte "AT" zu ermitteln *******'
ATage = 0

For nZahl = AfoTermin_Auswahl(0) To AfoTermin_Auswahl(2)
If (ActiveWorkbook.ActiveSheet.Cells(nZahl, AT_Auswahl(1)).Value > ATage) Then
ATage = ActiveWorkbook.ActiveSheet.Cells(nZahl, AT_Auswahl(1)).Value
End If
Next nZahl

'****** Ende hoechste Anzahl an Arbeitstagen aus Excel-Spalte "AT" zu ermitteln *******'

'************** Beginn jeweiliges Datum zu den Arbeitstagen zu ermitteln **************'

Datum = ActiveWorkbook.ActiveSheet.Cells(Lieferung_Auswahl(0), Lieferung_Auswahl(1)).Value

Do
If (Arbeitstag(Datum) = True) Then
Liste.Add (Datum)
Datum = Datum - 1
ATage = ATage - 1
ElseIf (Arbeitstag(Datum) = False) Then
Datum = Datum - 1
End If
Loop While ATage >= 0

For nZahl = AfoTermin_Auswahl(0) To AfoTermin_Auswahl(2)
If (IsEmpty(ActiveWorkbook.ActiveSheet.Cells(nZahl, AT_Auswahl(1)).Value) = False) Then
Wert = ActiveWorkbook.ActiveSheet.Cells(nZahl, AT_Auswahl(1)).Value
ActiveWorkbook.ActiveSheet.Cells(nZahl, AfoTermin_Auswahl(1)).Value = Liste.Item(Wert + 1)
End If
Next nZahl

'************** Ende jeweiliges Datum zu den Arbeitstagen zu ermitteln **************'

End Sub

Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
Rot letzte zeile berechnet er nicht
26.03.2008 08:57:31 daniel
NotSolved
26.03.2008 14:13:48 Holger
NotSolved
26.03.2008 14:54:45 Daniel
NotSolved