Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
740to744
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
740to744
740to744
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

2 functions+1code=1code aber wie?

2 functions+1code=1code aber wie?
08.03.2006 19:07:05
selo
hallo an die profis
habe ein problem das bei einem bestimmten code als schleife immer auf die functionen atc1 oder atc gesprungen wird ohne irgendwelche verweise darauf. Habe in mehreren foren gefragt aber keiner hat eine lösung für mich.
Nun habe ich mir gedacht den code

Sub berechnung ()
Worksheets("gesamtplanung").Activate
With ActiveSheet
Dim loLetzte As Long
Dim loI As Long
loLetzte = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows.Count)
For loI = 2 To loLetzte
Cells(loI, 14).FormulaLocal = "=WENN(Arbeitstage!$J$7=WAHR;atc1(c" & loI & ";d" & loI & ";Arbeitstage!funftagewochenamen);(WENN(Arbeitstage!$K$7=WAHR;atc(c" & loI & ";d" & loI & ";Arbeitstage!sechstagewochenamen);o" & loI & ")))"
Cells(loI, 14).NumberFormat = "General"
Range(Cells(loI, 14), Cells(loI, 15)).HorizontalAlignment = xlCenter
Next loI
Range(Cells(loI, 14), Cells(loI, 15)).Font.ColorIndex = 3
End With
'Worksheets("tabelle3").Activate
End Sub

welcher normalerweise auf die functionen

Function ATC1(Start, Ende, FT)
Dim C As Range
ATC1 = 0
For j = Start To Ende
If (Weekday(j) <> 1) And (Weekday(j) <> 7) Then ATC1 = ATC1 + 1
Next
For j = 1 To FT.Rows.Count
Set C = FT.Cells(j, 1)
If C >= Start And C <= Ende Then
If (Weekday(C) <> 1) And (Weekday(C) <> 7) Then ATC1 = ATC1 - 1
End If
Next j
End Function

sowie

Function ATC(Start, Ende, FT)
Dim C As Range
Dim a%, b%, i%
a = 8 - Weekday(Start)
b = Weekday(Ende) - 1
ATC = (Ende - Start) - (a + b)
ATC = ATC - (ATC / 7)
ATC = ATC + a + b
If Weekday(Start) = 1 Then ATC = ATC - 1
For i = 1 To FT.Rows.Count
Set C = FT.Cells(i, 1)
If C >= Start And C <= Ende Then
If Weekday(C) <> 1 Then ATC = ATC - 1
End If
Next i
End Function

zugreift umschreiben damit es ein einzelner code daraus wird ohne das auf die functions separat aus einem modul zugegriffen werden muß während der berechnung.
Jedoch habe ich das problem ich weiß nicht wie ich das hinbekommen kann.
kann jeden rat gebrauchen
bedanke mich schon im voraus
gruß
selo

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 2 functions+1code=1code aber wie?
08.03.2006 20:34:00
Luschi
Hallo selo,
wenn ich Dich also richtig verstanden habe, willst Du nicht mehr die Formeln in die Zellen schreiben, sondern das Ergebnis in der Sub selbst berechnen und dann nur noch das Ergebis in die Zellen schreiben. Hier mein 1. Versuch:

Sub beRechnung()
'first trying by Luschi
Dim wb As Workbook, _
ws1 As Worksheet, ws2 As Worksheet, _
rg1 As Range, rg2 As Range, _
loLetzte As Long, loI As Long, _
nArt As Integer, n1 As Long, n2 As Long, _
v As Variant, _
xlApp As Application
Set xlApp = Application
xlApp.ScreenUpdating = False
xlApp.Calculation = xlCalculationManual
xlApp.EnableEvents = False
Set wb = ThisWorkbook
Set ws1 = wb.Worksheets("gesamtplanung")
Set ws2 = wb.Worksheets("Arbeitstage")
ws1.Activate
loLetzte = IIf(IsEmpty(ws1.Cells(ws1.Rows1.Count, 2)), _
ws1.Cells(ws1.Rows1.Count, 2).End(xlUp).Row, ws1.Rows1.Count)
For loI = 2 To loLetzte
If (ws2.Range("J7") Or ws2.Range("K7")) Then
Set rg1 = ws1.Range("C" & loI)
Set rg2 = ws1.Range("D" & loI)
If ws2.Range("J7") Then
nArt = 1
Set rg3 = wb.Names("funftagewochenamen").RefersToRange
Else
nArt = 2
Set rg3 = wb.Names("sechstagewochenamen").RefersToRange
End If
Else
nArt = 2
Set rg3 = ws1.Range("O" & loI)
End If
Select Case nArt
Case 1:    n1 = ATC1(rg1.Value, rg2.Value, rg3)
Case 2:    n1 = ATC(rg1.Value, rg2.Value, rg3)
Case 3:    v1 = rg3.Value
End Select
If nArt <= 2 Then
ws1.Cells(loI, 14).Value = n1
Else
ws1.Cells(loI, 14).Value = v1
End If
ws1.Cells(loI, 14).NumberFormat = "General"
ws1.Range(Cells(loI, 14), Cells(loI, 15)).HorizontalAlignment = xlCenter
ws1.Range(Cells(loI, 14), Cells(loI, 15)).Font.ColorIndex = 3
Set rg1 = Nothing
Set rg2 = Nothing
Set rg3 = Nothing
Next loI
'wb.Worksheets("tabelle3").Activate
Set ws1 = Nothing
Set ws2 = Nothing
Set wb = Nothing
xlApp.Calculation = xlCalculationAutomatic
xlApp.EnableEvents = True
xlApp.ScreenUpdating = True
Set xlApp = Nothing
End Sub
Private Function ATC1(start As start, Ende As Date, ByRef FT As Range)
Dim C As Range, xZahl As Integer, j As Date, k As Long
xZahl = 0
For j = start To Ende
If (Weekday(j) <> 1) And (Weekday(j) <> 7) Then
xZahl = xZahl + 1
End If
Next
For k = 1 To FT.Rows.Count
Set C = FT.Cells(k, 1)
If C.Value >= start And C.Value <= Ende Then
If (Weekday(C.Value) <> 1) And (Weekday(C.Value) <> 7) Then
xZahl = xZahl - 1
End If
End If
Next j
Set C = Nothing
ATC1 = xZahl
End Function
Private Function ATC(start As Date, Ende As Date, ByRef FT As Range)
Dim C As Range, _
a%, b%, i%, xZahl As Integer
a = 8 - Weekday(start)
b = Weekday(Ende) - 1
xZahl = (Ende - start) - (a + b)
xZahl = xZahl - (xZahl / 7)
xZahl = xZahl + a + b
If Weekday(start) = 1 Then
xZahl = xZahl - 1
End If
For i = 1 To FT.Rows.Count
Set C = FT.Cells(i, 1)
If C.Value >= start And C.Value <= Ende Then
If Weekday(C.Value) <> 1 Then
xZahl = xZahl - 1
End If
End If
Next i
Set C = Nothing
ATC = xZahl
End Function
Konnte den Code aber nicht testen, weil ich die Range-Bereiche für "funftagewochenamen" und "sechstagewochenamen" nicht habe.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: 2 functions+1code=1code aber wie?
08.03.2006 22:01:17
selo
hallo luschi
habe einen fehler bei
loLetzte = IIf(IsEmpty(ws1.Cells(ws1.Rows1.Count, 2)), _
methode oder datenobjekt nicht gefunden
habe hier versucht die datenreihen mal hochzuladen es sind nur die werte ohne formel
https://www.herber.de/bbs/user/31729.xls
AW: 2 functions+1code=1code aber wie?
08.03.2006 23:54:38
Luschi
Hallo Selo,
habe mal die Feiertagsübersicht so geändert, daß man in einem Feld das Jahr
bestimmt und die Liste sich automatisch korrigiert.
https://www.herber.de/bbs/user/31735.xls
Gruß von Luschi
aus klein-Paris
Anzeige
"Fehler beim Kompilieren"
09.03.2006 06:34:11
selo
hallo luschi
danke dir ersteinmal für deine hilfe
habe den code eingefügt bekomme jedoch den fehler "Fehler beim Kompilieren"
benutzerdefinierter typ nicht definiert bei
Private Function ATC1(start As start, Ende As Date, ByRef FT As Range
https://www.herber.de/bbs/user/31738.xls
AW: 2 functions+1code=1code aber wie?
09.03.2006 20:32:53
selo
hallo luschi
habe einen fehler bei
loLetzte = IIf(IsEmpty(ws1.Cells(ws1.Rows1.Count, 2)), _
methode oder datenobjekt nicht gefunden
habe hier versucht die datenreihen mal hochzuladen es sind nur die werte ohne formel
https://www.herber.de/bbs/user/31729.xls
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige