Option Explicit Private Sub cmdAutocalc_Click() If [autocalc] <> "ein" Then [autocalc] = "ein": Exit Sub If [autocalc] = "ein" Then [autocalc] = "aus" End Sub Private Sub cmdCalc_Click() Dim Y As Long, Line As Long, PNum As Long Dim c, ptype, pquant Range("sums").ClearContents For Line = 1 To 3 For Y = 1 To maxTage c = Range("line1").Offset(Y - 1, (Line - 1) * 3) If c <> "" Then ''aha, neue Kampagne.... ptype = c ''MsgBox y, , "neue Kampagne" PNum = findProdNum(ptype) End If pquant = Range("line1").Offset(Y - 1, (Line - 1) * 3 + 1) ''MsgBox ptype, , pquant [sorte1].Offset(PNum - 1, 2) = [sorte1].Offset(PNum - 1, 2) + pquant Next Y Next Line End Sub Private Sub cmdClear1_Click() Dim Ro1 As Long, Ro2 As Long, Co As Long Dim preQ As Double, dd As Long, ss As String Co = ActiveCell.Column Ro1 = main.findProdBeginRow Ro2 = main.findNextProdRow - 1 Range(Cells(Ro1, Co), Cells(Ro2, Co + 1)).Select If MsgBox("wirklich diese Kampagne löschen?", vbYesNoCancel, "myprog") = vbYes Then Selection.ClearContents 'normale tagesleistung des vorgänger-prods ermitteln ' (nicht einfach letzten wert nehmen, könnte P_wechsel sein) .... ss = main.findVorProd: dd = main.findProdNum(ss) preQ = main.calcQuantperday(Co, dd) Range(Cells(Ro1, Co + 1), Cells(Ro2, Co + 1)) = preQ ''If Ro2 + 1 <= [maxro] Then Call calcfirstday(Ro2, Co) 'nachfolgende Kampagne sicherheitshalber neu ausrechnen... If Ro2 + 1 >= 5 And Ro2 + 1 <= [maxro] Then Call writeQuants(Ro2 + 1, Co) If [plan!autocalc] = "ein" Then Call cmdCalc_Click End If Cells(Ro1, Co).Select End Sub Private Sub cmdClearAll_Click() If MsgBox("wirklich ALLES löschen?", vbYesNoCancel, "myprog") = vbYes Then Range("d4:k35").ClearContents If [plan!autocalc] = "ein" Then Call cmdCalc_Click End If End Sub Private Sub cmdMonPlus_Click() Dim myMon, newMon, afternewMon, m, Y, newdays myMon = [imon] m = Month(myMon): Y = Year(myMon) m = m + 1 If m = 13 Then m = 1: Y = Y + 1 newMon = DateSerial(Y, m, 1): [imon] = newMon m = m + 1 If m = 13 Then m = 1: Y = Y + 1 afternewMon = DateSerial(Y, m, 1) newdays = afternewMon - newMon: [idays] = newdays: [maxro] = 4 + newdays End Sub Private Sub cmdMonMinus_Click() Dim myMon, newMon, m, Y, newdays myMon = [imon] m = Month(myMon): Y = Year(myMon) m = m - 1 If m = 0 Then m = 12: Y = Y - 1 newMon = DateSerial(Y, m, 1): [imon] = newMon newdays = myMon - newMon: [idays] = newdays: [maxro] = 4 + newdays End Sub Public Function EasterDate(Yr As Integer) As Date Dim D As Integer D = (((255 - 11 * (Yr Mod 19)) - 21) Mod 30) + 21 EasterDate = DateSerial(Yr, 3, 1) + D + (D > 48) + 6 - ((Yr + Yr \ 4 + _ D + (D > 48) + 1) Mod 7) End Function Sub testEasterDate() MsgBox EasterDate(2003) End Sub Private Sub cmdNewP_Click() Dim Ro As Long, oldRo As Long, Co As Long, D As Long, v As Long, R2 As Long Ro = ActiveCell.Row: Co = ActiveCell.Column: oldRo = Ro 'korrekter eingabe-bereich? ................. If Ro < 5 Or Ro > [maxro] Then GoTo mySubEnd If Co <> 4 And Co <> 7 And Co <> 10 Then GoTo mySubEnd 'vorgabewerte für userform berechnen............. [Prenam] = main.findVorProd '...vorprod ermitteln [PreNum] = main.findProdNum([Prenam]) '... produktnr. des Vorprods laut Liste [daystonext] = main.findNextProdRow - Ro frmJob.lbDaystoNext.Caption = [daystonext] frmJob.tbDays.Value = [daystonext] [Days] = [daystonext] [daysToMonEnd] = [maxro] - Ro + 1 '' später für variable Monatslänge erweitern! frmJob.lbDaystomonend.Caption = [daysToMonEnd] [Nexnam] = Cells(Ro + [daystonext], Co) [nexNum] = main.findProdNum([Nexnam]) [daystoprolong] = 0 frmJob.lbDaystoprolong.Caption = "" 'option und eingabefeld von tbdays aktivieren... frmJob.tbQuantperjob.Enabled = False 'die andere textbox sperren frmJob.tbDays.Enabled = True 'die eigene textbox öffnen frmJob.OptionButton1.Value = True 'erst mal nur listfeld aktivieren, 'alles andere solange invisible bis pizza gewählt wurde..... frmJob.tbQuantperjob.Visible = False frmJob.tbDays.Visible = False frmJob.OptionButton1.Visible = False frmJob.OptionButton2.Visible = False 'userform aufrufen myCancelled = True '.. form könnte ja auch durch window-close ohne cancel-button geschlossen werden frmJob.Show If myCancelled Then GoTo mySubEnd ''Exit Sub 'ggf Namen eintragen....... If [PNam] <> [Prenam] Then Cells(Ro, Co) = [PNam] 'name nur wenn ungleich vorprod Else Cells(Ro, Co) = "" ''sicherheitshalber löschen falls hier etwas übeschrieben wurde End If 'wenn nicht alle freien tage belegt werden, weil job gekürzt... If [daystonext] - [Days] > 0 Then 'erst mal komplett bis next löschen For D = 1 To [daystonext] - 1 Cells(Ro + D, Co + 1) = "" Next D End If ' ggf nachfolgende kampagnen runterschieben, wenn prolongiert wird... If [daystoprolong] > 0 Then v = main.findNextProdRow Cells(v, Co).Select Call SchiebRunter([daystoprolong]) End If Call writeQuants(Ro, Co) 'nachfolgende Kampagne sicherheitshalber neu ausrechnen... R2 = main.findNextProdRow If R2 >= 5 And R2 <= [maxro] Then Call writeQuants(R2, Co) mySubEnd: Cells(oldRo, Co).Select '' old position If [plan!autocalc] = "ein" Then Call cmdCalc_Click End Sub Private Sub cmdDown_Click() Call main.SchiebRunter(1) If [plan!autocalc] = "ein" Then Call cmdCalc_Click End Sub Private Sub cmdUp_Click() Call main.SchiebRauf(-1) If [plan!autocalc] = "ein" Then Call cmdCalc_Click End Sub Private Sub cmdPr1_Click() Sheets("Plan").Activate: [a1].Select ActiveSheet.PageSetup.PrintArea = "Plan!B$2:$M$35" ActiveSheet.PageSetup.Orientation = xlPortrait ' or xlLandscape ActiveSheet.PageSetup.FitToPagesWide = 1 ' alles an Seitenbreite anpassen ActiveSheet.PageSetup.FitToPagesTall = 1 ' alles an Seitenhöhe anpassen ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub Private Sub cmdPr2_Click() Sheets("change").Activate: [change!a1].Select ' [a1].select allein wäre falsch! ActiveSheet.PageSetup.PrintArea = "druckumstell" ActiveSheet.PageSetup.Orientation = xlLandscape ' or xlPortrait ActiveSheet.PageSetup.FitToPagesWide = 1 ' alles an Seitenbreite anpassen ActiveSheet.PageSetup.FitToPagesTall = 1 ' alles an Seitenhöhe anpassen ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True End Sub Private Sub cmdPr3_Click() End Sub Private Sub cmdExp_Click() Call Util.iExportPart("change", "druckumstell", "c:\temp\test2.xls", True) End Sub