Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
09.11.2020, 11:54
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
•
Beiträge: 1.437
Themen: 11
Danke erhalten: 273 in 232 Posts
Danke gesagt: 26
Registriert seit: 24.03.2012
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:2 Benutzer bedanken Danke koter für diesen Beitrag
• nowa, Unkraut
Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
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
•
Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
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
•
Beiträge: 1.437
Themen: 11
Danke erhalten: 273 in 232 Posts
Danke gesagt: 26
Registriert seit: 24.03.2012
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:1 Benutzer bedankt Danke koter für diesen Beitrag
• nowa
Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
Wunderbar, du hast mir sehr geholfen.
Jetzt funktioniert das wie gewünscht.
Vielen Dank, Norbert
•
Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
20.11.2020, 11:01
(Dieser Beitrag wurde zuletzt bearbeitet: 20.11.2020, 11:06 von nowa.)
(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
•
Beiträge: 1.437
Themen: 11
Danke erhalten: 273 in 232 Posts
Danke gesagt: 26
Registriert seit: 24.03.2012
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:1 Benutzer bedankt Danke koter für diesen Beitrag
• nowa
Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
22.11.2020, 10:48
Ja Super
Vielen lieben Dank, Norbert
•
Beiträge: 38
Themen: 7
Danke erhalten: 0 in 0 Posts
Danke gesagt: 5
Registriert seit: 03.12.2016
11.12.2020, 09:35
(Dieser Beitrag wurde zuletzt bearbeitet: 11.12.2020, 09:37 von nowa.)
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
•
|