Makro erzeugt Laufzeitfehler
#1
Sad 
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
Zitieren
#2
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
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • nowa
Zitieren
#3
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
Zitieren
#4
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
Zitieren
#5
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
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • nowa
Zitieren
#6
Wunderbar, du hast mir sehr geholfen.
Jetzt funktioniert das wie gewünscht.

Vielen Dank, Norbert
Zitieren
#7
(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
Zitieren
#8
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
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • nowa
Zitieren
#9
Thumbs Up 
Ja Super Daumenhoch 

Vielen lieben Dank, Norbert
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Makro-Schutz FlyingGancho 7 131 27.11.2020, 21:23
Letzter Beitrag: koter
Question Altes .bas Makro mit CorelDraw 2017 öffnen GreenDread 2 716 01.04.2019, 17:03
Letzter Beitrag: GreenDread
  Makro gesucht, das alle offenen Andockfenster schließt und wiederherstellt datt Niggl 7 859 27.03.2017, 20:57
Letzter Beitrag: datt Niggl
  Flächenberechnung durch Makro oder Script BlackEagle85 20 11.906 28.12.2015, 17:39
Letzter Beitrag: Administrator
  DWG aus CDR erzeugt Problemix 13 2.252 01.06.2015, 10:48
Letzter Beitrag: Problemix
  Massenänderung der Dateiversion per Makro derhornist 3 1.005 13.04.2015, 21:57
Letzter Beitrag: norre
  X5 Farbpaletten ersetzen, Makro f. Dummies + Calendar Wizard Vectoria 18 2.151 06.02.2015, 02:46
Letzter Beitrag: koter
  Makro für Speicherort von Backups Unkraut 3 838 23.06.2014, 10:00
Letzter Beitrag: Unkraut
  Corel X5 Makro Haris 4 1.624 20.09.2012, 20:44
Letzter Beitrag: Haris
  einem Makro unter die Haube geschaut Unkraut 0 677 08.02.2011, 14:40
Letzter Beitrag: Unkraut