Eine Konstruktion, welche häufig gebraucht wird:
---
tell document 1 of application "QuarkXPress 6.1"
repeat with i from 1 to count of pages
tell page i
repeat with j from 1 to count of text boxes
tell text box j
---
Dies funktioniert immer noch. Aber aufgepasst, wenn auf Doppelseiten Boxen seitenübergreifend gruppiert sind. XPress 6.1 rechnet dann beim Zählen alle Boxen der Gruppe ins Resultat der linken Seite. Und auf der rechten Seite fehlt die entsprechende Anzahl. Dasselbe Problem tritt übrigens auch auf, wenn die Boxen "nur" ausgewählt sind.
Der Befehl 'tell text box j' generiert eine Fehlermeldung, sobald der Wert des Zählers 'j' die tatsächliche Anzahl Boxen der aktuellen Seite übersteigt.
Abhilfe: entweder Gruppierungen – welche über zwei Seiten reichen –, vermeiden, oder anstelle der Seiten, die Arbeitsflächen adressieren:
---
tell document 1 of application "QuarkXPress 6.1"
repeat with i from 1 to count of spreads
tell spread i
---
Manchmal muss man aber trotzdem die Boxen seitenweise durchgehen und man hat nicht immer die Kontrolle über das Dokument, bzw. will gelieferte Dokumente nicht vorgängig auf "verbotene" Gruppierungen untersuchen. In diesem Fall bleibt nur die Möglichkeit, eine "ewige" Wiederholschleife zu verwenden, in Verbindung mit einem 'try/on error'-Konstrukt. Bei einem Fehler wird die Schleife verlassen.
---
tell document 1 of application "QuarkXPress 6.1"
repeat with i from 1 to count of pages
tell page i
set ctr to 1
repeat
try
tell text box ctr
--Hier weitere Befehle
end tell
on error
exit repeat
end try
set ctr to ctr + 1
end repeat
end tell
end repeat
end tell
---
Weil eine ewige Repeatschleife keinen automatischen Zähler hat, muss man eine Variable initialisieren (hier 'set ctr to 1') und dann innerhalb der Schleife um 1 erhöhen: 'set ctr to ctr + 1'.
Wenn die angesprochene Box nicht existiert, dann ergibt dies einen Fehler und die Bedingung, welche im 'on error'-Teil definiert ist, wird ausgeführt, nämlich 'exit repeat'. Die Wiederholschleife wird also verlassen und zwar nur die innere. Die äussere, jene welche die Seiten durchgeht, ist von diesem 'exit' nicht betroffen.
Hans Haesler <hsa@ringier.ch>