Juergens-Workshops.de Forum
Makro erzeugt Laufzeitfehler - Druckversion

+- Juergens-Workshops.de Forum (https://forum.juergens-workshops.de)
+-- Forum: Corel Grafik Forum (https://forum.juergens-workshops.de/forumdisplay.php?fid=65)
+--- Forum: Corel Draw (https://forum.juergens-workshops.de/forumdisplay.php?fid=93)
+--- Thema: Makro erzeugt Laufzeitfehler (/showthread.php?tid=38144)

Seiten: 1 2


Makro erzeugt Laufzeitfehler - nowa - 09.11.2020

Hallo liebe Corel-Spezialisten,

ich scheitere leider daran ein lauffähiges Makro aufzuzeichnen. Das Makro soll folgendes tun:

Alles auf der Seite markieren
dann alles in Kurven umwandeln
dann alle Linien mitscalieren
dann Alles gruppieren
diese Gruppe dann auf 10% verkleinern
dann die Gruppe auf die Seite zentrieren
dann die Seitengröße auf DIN A4 umstellen
(Ansicht auf ganze Seite umstellen)

Ich kann das Aufzeichnen, aber bei der Ausführung wird ein Laufzeitfehler gemeldet.
Irgend ein Parameter ist im ungültigen Bereich.
Ich habe es mehrmals versucht, die Infos aus dem Debugger aber leider nicht verstanden.

Ich verwende Corel X8

Liebe Grüße und bleibt gesund, Norbert


RE: Makro erzeugt Laufzeitfehler - koter - 10.11.2020

Hallo Norbert,

Die Liste in Deinem Beitrag ist eigentlich schon das Makro.
Man muss es nur noch in VBA übersetzen:
Code:
Sub DiesUndDas()
   ActiveDocument.Unit = cdrMillimeter
   With ActivePage.Shapes.All
       .ConvertToCurves 'dann alles in Kurven umwandeln
       .SetOutlinePropertiesEx ScaleWithShape:=cdrTrue 'dann alle Linien mitscalieren
       .Group 'dann Alles gruppieren
       .Stretch 0.1 'diese Gruppe dann auf 10% verkleinern
       .CenterX = ActivePage.CenterX 'dann die Gruppe auf die Seite zentrieren
       .CenterY = ActivePage.CenterY
   End With
   ActivePage.SetSize 210, 297 'dann die Seitengröße auf DIN A4 umstellen
   ActiveWindow.ActiveView.ToFitPage '(Ansicht auf ganze Seite umstellen)
End Sub
Punkt eins (Alles auf der Seite markieren) habe ich ausgelassen.

Es kann aber zu unerwünschten Ergebnissen führen, wenn man das alles „in einem Rutsch“ macht.
Es kommt auf die Art der Objekte in der Zeichnung an, ob es klappt. 

Gruß

Koter


RE: Makro erzeugt Laufzeitfehler - nowa - 10.11.2020

Hallo Koter,

vielen Dank für deine ausführliche Antwort mit dem Code.
Ich hatte versucht das Makro durch eine "Aufzeichnung" zu erstellen. Das hat wohl nicht funktioniert.
Gibt es eigentlich eine Übersicht dieser "Makro-Syntax"?
Ich kann leider nur Fortran, Pascal, und Basic (nix objektorientiertes)

Mal sehen, wie ich den Code in das Corel bekomme :-)

Ich gebe auf jeden Fall Rückmeldung, kann aber ein wenig dauern.

LG Norbert


RE: Makro erzeugt Laufzeitfehler - nowa - 10.11.2020

Nochmals vielen Dank,

das funktioniert jetzt ganz gut.
Nur Eines ist komisch: Alle Objekte haben nach der Ausführung einen Umriss, das sollte nicht sein.
Objekte ohne Umriss sollen auch ohne Umriss bleiben. Aber alle Linien sollen mit skaliert werden, das funktioniert.

Noch eine Idee?  Danke, Norbert


RE: Makro erzeugt Laufzeitfehler - koter - 10.11.2020

Hallo Norbert,

(10.11.2020, 08:57)nowa schrieb: ...Gibt es eigentlich eine Übersicht dieser "Makro-Syntax"?
Ich kann leider nur Fortran, Pascal, und Basic (nix objektorientiertes)

Fortran ist objektorientiert und die Makros werden in Basic geschrieben,
(wie beim C64 nur ohne Zeilennummern) also kannst Du ja schon fast alles!
Eigene Objektklassen musst Du nicht anlegen, die liefert Corel.

Eine Übersicht der Syntax erreichst Du mit der F1-Taste und die Objekte
stehen im Objekt-Katalog, den erreichst Du mit der F2-Taste.

(10.11.2020, 18:22)nowa schrieb: Nur Eines ist komisch: Alle Objekte haben nach der Ausführung einen Umriss, das sollte nicht sein.
Objekte ohne Umriss sollen auch ohne Umriss bleiben.

Das ist nicht komisch, das liegt an dem „Rutsch“.
Du musst den Teil: „dann alle Linien mitscalieren“ aus dem „Rutsch“ nehmen und vorziehen:

Code:
Sub DiesUndDas()
   Dim MitUmriss As ShapeRange ' ShapeRange-Objekt deklarieren
   ActiveDocument.Unit = cdrMillimeter
   Set MitUmriss = ActivePage.Shapes.FindShapes(, , True, "@com.Outline.Width > 0") 'alle Objekte mit Umriss finden
   MitUmriss.Shapes.All.SetOutlinePropertiesEx ScaleWithShape:=cdrTrue 'alle Linien mitscalieren
   With ActivePage.Shapes.All
       .ConvertToCurves 'dann alles in Kurven umwandeln
       .Group 'dann Alles gruppieren
       .Stretch 0.1 'diese Gruppe dann auf 10% verkleinern
       .CenterX = ActivePage.CenterX 'dann die Gruppe auf die Seite zentrieren
       .CenterY = ActivePage.CenterY
   End With
   ActivePage.SetSize 210, 297 'dann die Seitengröße auf DIN A4 umstellen
   ActiveWindow.ActiveView.ToFitPage '(Ansicht auf ganze Seite umstellen)
End Sub

Gruß

Koter


RE: Makro erzeugt Laufzeitfehler - nowa - 10.11.2020

Wunderbar, du hast mir sehr geholfen.
Jetzt funktioniert das wie gewünscht.

Vielen Dank, Norbert


RE: Makro erzeugt Laufzeitfehler - nowa - 20.11.2020

(10.11.2020, 21:57)nowa schrieb: Wunderbar, du hast mir sehr geholfen.
Jetzt funktioniert das wie gewünscht.

Vielen Dank, Norbert

Nochmals vielen Dank.
Kann ich die Funktion auf mehrseitige Dokumente erweitern? So eine Art Schleife über alle Seiten.
Im Moment muss ich das Makro für jede Seite aufrufen.

LG Norbert


RE: Makro erzeugt Laufzeitfehler - koter - 22.11.2020

Hallo Norbert,

(20.11.2020, 11:01)nowa schrieb: ...Kann ich die Funktion auf mehrseitige Dokumente erweitern?...

Ja, das geht so:

Code:
Sub DiesUndDasJedeSeite()
   Dim Seite As Page
   Dim MitUmriss As ShapeRange
   ActiveDocument.Unit = cdrMillimeter
   For Each Seite In ActiveDocument.Pages
       Seite.Activate
       ActiveDocument.BeginCommandGroup "DiesUndDas Seite" & Seite.Index
       Set MitUmriss = Seite.Shapes.FindShapes(, , True, "@com.Outline.Width > 0")
       MitUmriss.Shapes.All.SetOutlinePropertiesEx ScaleWithShape:=cdrTrue
       With Seite.Shapes.All
           .ConvertToCurves
           .Group
           .Stretch 0.1
           .CenterX = ActivePage.CenterX
           .CenterY = ActivePage.CenterY
       End With
       Seite.SetSize 210, 297
       ActiveDocument.EndCommandGroup
       ActiveWindow.ActiveView.ToFitPage
   Next
End Sub

Gruß

Koter


RE: Makro erzeugt Laufzeitfehler - nowa - 22.11.2020

Ja Super Daumenhoch 

Vielen lieben Dank, Norbert


Hilfslinien löschen - nowa - 11.12.2020

Guten Morgen,

ein kleines Problem habe ich noch.
Wenn das Dokument Hilfslinien enthält, macht das Probleme auf Seite 1. Ist eigentlich logisch.
Löscht man die Hilfslinien vor dem Ausführen des Makros, dann funktioniert das wunderbar.
Gibt es einen Befehl, der alle Hilfslinien löscht? Am besten im Makro selbst.
In früheren Versionen waren die Hilfslinien einfacher/schneller zu löschen. In  der X18 muss ich immer über das Andockfester gehen.

Liebe Grüße, Norbert