Domino 9 und frühere Versionen > ND7: Entwicklung
Excel-Export, Seitenumbrüche zählen
HarryB:
--- Zitat von: Demian am 16.10.07 - 13:11:27 ---Naja, als letztes ausgeführt wird ex.cells(Reihe,6).value = doc.Niederlassung(0)
Der Eintrag ist dann auch in der Exceltabelle enthalten.
--- Ende Zitat ---
Kann es sein, dass das Feld Niederlassung einen Wert enthält, der in Excel unzulässig ist? Was passiert zum Beispiel wenn Niederlassung leer ist oder einen Zeilenumbruch enthält?
--- Zitat von: Demian am 16.10.07 - 13:11:27 ---Finde es halt echt seltsam, dass der Fehler nicht immer und nicht immer an der selben Stelle auftritt, obwohl im Code nichts geändert wird.
--- Ende Zitat ---
Ja, die Fehler sind am schlimmsten einzugrenzen. Meiner Meinung nach ist der Fehler entweder in den Daten zu suchen oder aber in Excel.
--- Zitat von: Demian am 16.10.07 - 13:11:27 ---Vorher hatte ich sämtliche Einträge mittels .select und activecell.value gemacht und habe dann gestern auf cells(Reihe,1).value umgestellt, weil das theoretisch etwas schneller ist, da ja nicht jede Zeile selektiert wird.
--- Ende Zitat ---
Das sollte eigentlich keinen Unterschied ausmachen, da du letztendlich auf dasselbe Objekt zugreifst, egal ob über activecell oder über cells(x,y).
Viele Grüße
Harry
Demian:
Moin Harry,
das Feld Niederlassung ist immer gefüllt. Es handelt sich um ein Dialoglistenfeld, Zeilenumbrüche sind nicht möglich. Allerdings ist das Feld Tarifverband nicht immer gefüllt. In Excel bleibt die Zelle dann entsprechend leer.
Vielleicht wird bei cells(x,y) der Seitenumbruch nicht richtig ausgelöst?
Ich werde es einfach mal auf .select zurückstellen und dann mehrmals testen. Ist dann zwar gut ne halbe minute langsamer, aber egal.
Und am Wochenende werde ich den Code mal von Excel nach Excel testen mit cells(x,y). Dann kann ich wenigstens eingrenzen, ob es an Excel liegt oder nicht.
Ich melde mich dann, wenn ich näheres weiß.
Gruß
Demian
HarryB:
Hallo Demian,
--- Zitat von: Demian am 19.10.07 - 10:26:26 ---Vielleicht wird bei cells(x,y) der Seitenumbruch nicht richtig ausgelöst?
--- Ende Zitat ---
ich denke nicht, dass es an cells(x,y) liegt. Vielleicht sollte man sich allgemein überlegen, wann der Seitenumbruch berechnet wird.
Wenn ich in Excel eine neues Arbeitsblatt anlege, sehe ich erst mal keine Seitenumbrüche (in diesem Status dürften sie undefiniert sein). Wenn ich mit die Druckvorschau anzeigen lasse, werden danach Seitenumbrüche angezeigt. Möglicherweise werden die Seitenumbrüche beim Ablauf des Scripts auch nicht immer sofort festgelegt bzw. die Berechnung der Seitenumbrüche im Hintergrund dauert länger, als das Script für den nächsten Schritt braucht, was dann eben manchmal zu dem Fehler führt.
Kann man das Berechnen der Seitenumbrüche erwzingen?
Vielleicht könntest du alternativ immer nur eine bestimmte Zahl an Zellen schreiben und dann einen manuellen Umbruch einfügen. Dann ist die Platzausbeute vielleicht nicht optimal, aber das Script rennt wenigstens immer.
Viele Grüße
Harry
Demian:
Moin,moin,
habe das Ganze jetzt wieder umgestellt.
Function Export
Dim AktuelleSeite As Integer,Reihe As Long
'Seitenzähler setzen
AktuelleSeite = 1
Reihe = 2 'Exportbeginn (Reihe 1 = Überschrift)
ex.range("a2").select
'Zeilenweise exportieren
Do While Not (doc Is Nothing)
ex.activecell.value = doc.Tarifverband(0)
ex.activecell.offset(0,1).value = doc.Einsatzort(0)
ex.activecell.offset(0,2).value = doc.Ausloesung(0)
ex.activecell.offset(0,2).NumberFormat = "#.##0,00 €" 'EURO Formatierung
ex.activecell.offset(0,3).value = doc.FGErwachsene(0)
ex.activecell.offset(0,3).NumberFormat = "#.##0,00 €" 'EURO Formatierung
ex.activecell.offset(0,4).value = doc.FGAzubis(0)
ex.activecell.offset(0,4).NumberFormat = "#.##0,00 €" 'EURO Formatierung
ex.activecell.offset(0,5).value = doc.Niederlassung(0)
ex.activecell.offset(0,6).value = SeitenNummer(ex.activecell) ' Spalte wird später gelöscht
If Seitennummer(ex.activecell) > AktuelleSeite Then
i = i - 1 '1. Zelle auf neuer Seite ist weiß
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
ex.activecell.offset(1,0).select
Loop
...
Function Seitennummer(Zelle) As Integer 'Reihe As Long,Spalte 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(Zelle.Parent.Parent.Name).Worksheets(Zelle.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 > Zelle.Column Then Exit Forall
SeitenNummer = SeitenNummer + ZaehlerHSU
End Forall
' Horizontalen Seitenumbruch des Bezugs ermitteln
Forall HSeitenUmbruch In wks.HPageBreaks
If HSeitenumbruch.Location.Row > Zelle.row Then Exit Forall ' > ex.cells(Reihe,1).Row
SeitenNummer = SeitenNummer + ZaehlerVSU
End Forall
' Rückgabewert an Funktion übergeben
SeitenNummer = SeitenNummer + 1
End Function
Das ganze funktioniert jetzt wieder ausnahmslos ohne Fehler.
Hatte aber die Funktion Seitennummer mal direkt in Excel getestet. Sie wirft den nächsten Seitenumbruch erst dann aus, wenn in der letzten Zeile der vorherigen Seite etwas eingegeben wird. Das ist ja aber auch mit cell(x,y) eigentlich der Fall.
Anscheinend wird das ex.activecell.offset(1,0).select anders verarbeitet als cells(x,y).value. Werde mich da aber nochmal im Office-Forum genauer informieren. Wenn ich Rückmeldungen habe, werde ich den Link bereitstellen.
Musste jetzt nur leider feststellen, dass das Einrichten von Rahmen nach dem Export auch zu einer Verschiebung der Seitenumbrüche führt, was dann wiederum eine falsche Zeilenfärbung zur Folge hat. ::) Mal sehen, werde die Rahmen einfach vorher schon anhand festlegen. Die Anzahl der Zeilen krieg ich ja mit view.allentries.count.
Gruß
Demian
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln