Moin,moin,
ich möchte bei einem Excelexport die Seitenumbrüche zählen, um die einzelnen Zellen abwechselnd färben zu können.
Ich verwende folgenden Code in einem Agenten:
sub Export()
Dim AktuelleSeite As Integer,Reihe As Long
'Seitenzähler setzen
AktuelleSeite = 1
'Exportbeginn (Reihe 1 = Überschrift)
Reihe = 2
'Zeilenweise exportieren
Do While Not (doc Is Nothing)
ex.cells(Reihe,1).value = doc.Tarifverband(0)
ex.cells(Reihe,2).value = doc.Einsatzort(0)
ex.cells(Reihe,3).value = doc.Ausloesung(0)
ex.cells(Reihe,3).NumberFormat = "0.00 €" 'EURO Formatierung
ex.cells(Reihe,4).value = doc.FGErwachsene(0)
ex.cells(Reihe,4).NumberFormat = "0.00 €" 'EURO Formatierung
ex.cells(Reihe,5).value = doc.FGAzubis(0)
ex.cells(Reihe,5).NumberFormat = "0.00 €" 'EURO Formatierung
ex.cells(Reihe,6).value = doc.Niederlassung(0)
ex.cells(Reihe,7).value = SeitenNummer(Reihe,7) ' Spalte wird später gelöscht
If Seitennummer(Reihe,1) > AktuelleSeite Then
i = i - 1 '1. Zelle auf neuer Seite ist weiß, wegen Wiederholungszeile
AktuelleSeite = AktuelleSeite + 1
End If
'ab 2. Zelle jede weitere 2. Zelle grau färben
i = i + 1
If i Mod 2 = 0 Then ex.Range(ex.cells(Reihe,1),ex.cells(Reihe,7)).Interior.ColorIndex = 15
'Userinfo
Print doc.Einsatzort(0)
Set doc =view.GetNextDocument(doc)
Reihe = Reihe + 1
Loop
End sub
Für jedes Dokument wird die Seitennummer ermittelt. Hier der Code für die Funktion Seitennummer:
Function Seitennummer(Reihe As Long,Spalte As Integer) As Integer
Dim wks As Variant
Dim ZaehlerVSU As Integer
Dim ZaehlerHSU As Integer
' Datei und Blatt der aktuellen Zelle ermitteln
Set wks = ex.Workbooks(ex.cells(Reihe,Spalte).Parent.Parent.Name).Worksheets(ex.cells(Reihe,Spalte).Parent.Name)
' Reihenfolge der Nummerierung ermitteln
If wks.PageSetup.Order = 1 Then '1 = xlDownThenOver
ZaehlerHSU = wks.HPageBreaks.Count + 1
ZaehlerVSU = 1
Else
ZaehlerVSU = wks.VPageBreaks.Count + 1
ZaehlerHSU = 1
End If
' Vertikalen Seitenumbruch des Bezugs ermitteln
Forall VSeitenUmbruch In wks.VPageBreaks
If VSeitenumbruch.Location.Column > Spalte Then Exit Forall
SeitenNummer = SeitenNummer + ZaehlerHSU
End Forall
' Horizontalen Seitenumbruch des Bezugs ermitteln
Forall HSeitenUmbruch In wks.HPageBreaks
If HSeitenumbruch.Location.Row > Reihe Then Exit Forall ' > ex.cells(Reihe,1).Row
SeitenNummer = SeitenNummer + ZaehlerVSU
End Forall
' Rückgabewert an Funktion übergeben
SeitenNummer = SeitenNummer + 1
End Function
Das Problem liegt in der Zeile : Forall HSeitenumbruch in wks.hpagebreaks
in der Funktion Seitennummer.
Mal läuft der Agent ganz durch und mal bringt er den Fehler "not a collection object". Mal tritt der Fehler in der 1. Zeile auf der 2. Seite auf, mal in der 1. Zeile auf der 3. Seite.
Es hat den Anschein, als würde der Agent sich selbst überholen...
Hat jemand ne Idee woran es liegen könnte, das er die Zeile mal durchläuft und mal nicht?
Gruß
Demian