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
[-] 2 Benutzer bedanken sich bei koter für diesen Beitrag:
  • nowa, Unkraut
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
#10
Question 
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
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Makro - Text an Rechteck ausrichten benni313 5 284 31.01.2024, 09:20
Letzter Beitrag: benni313
  Grafik per Makro Exportieren Chrisbeee 10 1.188 10.02.2023, 00:54
Letzter Beitrag: Chrisbeee
Photo Kreis erhält nach Export über Makro als DXF sehr viele Knotenpunkte Olaf 4 1.049 22.06.2022, 08:34
Letzter Beitrag: Olaf
  Makro für Konturerstellung pieksdi 16 2.421 08.08.2021, 12:00
Letzter Beitrag: pieksdi
  Makro in CorelDraw einbinden Karthagos 10 2.119 20.06.2021, 18:24
Letzter Beitrag: Karthagos
  Text in Corel Vorlage anhand von Makro / VBA ändern Olaf 4 1.727 02.03.2021, 11:06
Letzter Beitrag: Olaf
  Makro-Schutz FlyingGancho 7 1.453 27.11.2020, 21:23
Letzter Beitrag: koter
Question Altes .bas Makro mit CorelDraw 2017 öffnen GreenDread 2 1.724 01.04.2019, 17:03
Letzter Beitrag: GreenDread
  Makro gesucht, das alle offenen Andockfenster schließt und wiederherstellt datt Niggl 7 1.695 27.03.2017, 20:57
Letzter Beitrag: datt Niggl
  Flächenberechnung durch Makro oder Script BlackEagle85 20 15.587 28.12.2015, 17:39
Letzter Beitrag: Administrator