![]() |
VBA Objekte ausrichten - 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: VBA Objekte ausrichten (/showthread.php?tid=38682) Seiten:
1
2
|
VBA Objekte ausrichten - fremoikaner - 19.05.2024 Hallo zusammen! Ich möchte gerne in VBA einen Text erzeugen (das klappt soweit) und diesen zentriert über den vorher markierten Shapes ausrichten. Die markierten Shapes sind als ShapeRange der Variable sr zugewiesen, mein neu erstellter Text als s1 (Shape). Irgendjemand eine Idee? Viele Grüße fremoikaner RE: VBA Objekte ausrichten - koter - 19.05.2024 Hallo fremoikaner, willkommen im Forum! Ich gehe von einer horizontalen Ausrichtung aus. Der Befehl lauten dann: s1.CenterX = sr.CenterX Gruß Koter RE: VBA Objekte ausrichten - fremoikaner - 19.05.2024 Hallo Koter, Danke für die schnelle Antwort - noch dazu am Feiertag ;-) Ja, diesen Befehl hatte ich hier im Forum bei einem ähnlichen Problem schon gefunden und (leider erfolglos probiert). Ich erhalte einen Laufzeitfehler 438; Objekt unterstützt diese Eigenschaft oder Methode nicht. Auch beim Eingeben erhalte ich nach sr. den Befehl "CenterX" nicht angeboten. Die Zeile davor (die den Text erstellt) lautet: Code: Set s1 = ActiveLayer.CreateArtisticText(x + (w / 2) - 0.025, y + h + 0.02, name, , , "1451_Eng_DB", 8, , , , cdrCenterAlignment) Der Text wird ja auch einwandfrei erstellt - nur die Ausrichtung ist mein Problem ... Gibt es den Befehl möglicherweise erst in späteren Corel-Versionen? Gruß fremoikaner RE: VBA Objekte ausrichten - fremoikaner - 19.05.2024 kleiner Nachtrag, da es mir jetzt keine Ruhe gelassen hat ... In Corel X7 gibt es den Befehl wenn man sr. eingibt; in X3 gibt es ihn offenbar noch nicht ... Das Makro soll aber zumindest vorerst jedoch auf X3 laufen ... Gruß fremoikaner RE: VBA Objekte ausrichten - koter - 19.05.2024 Hallo fremoikaner, Du kannst die Position auch gleich beim Erstellen des Textes festlegen: Code: Sub TxtZAufAuswahl() Du darfst natürlich den Rotationspunkt bei der Auswahl nicht verschieben. Gruß Koter RE: VBA Objekte ausrichten - fremoikaner - 20.05.2024 Hallo Koter, Danke nochmal für den weiteren Lösungsansatz. Leider klappt es so nicht, da vorher noch etwas passiert, was ich beim ersten Mal nicht erwähnt hatte. Ist der Text nämlich zu lang (also länger, als die ShapeRange, die markiert war), wird der Text automatisch verkleinert, so dass er maximal so breit ist wie die ShapeRange. Ich kopiere mal etwas mehr von meinem Makro hierein - alles überflüssige habe ich entfernt: Code: Sub rechteck() Prinzipiell prüft das Makro, welches die kürzere Seite ist (Höhe oder Breite) und ergänzt dann die ShapeRange durch einen Namen an der kürzeren Seite (oben oder rechts) sowie einem Rahmen um ShapeRange+Name. Ist der Name länger, wird er entsprechend verkleinert. Dabei bleibt er jedoch an Ort und Stelle (also z.B. links vom Objekt). Somit würde er beim Rechteck dann *dort* mit aufgenommen werden. Er soll aber zentriert über der ShapeRange stehen (oder eben rechts daneben). Die ShapeRange kann zwischen 1 und n Objekten beinhalten; auch können auf der aktiven Seite auch andere Objekte sein, die nicht zur ShapeRange gehören - von daher funktioniert der Befehl "ActivePage.Shapes.All" leider nicht ... So habe ich es nämlich bei einem ähnlich gelagerten Fall gelöst. Gruß fremoikaner RE: VBA Objekte ausrichten - koter - 21.05.2024 Hallo Fremoikaner, ich habe Deinen Code verändert und die Anzahl der Variablen reduziert: Code: Sub rechteck2() Ich habe auf die BoundingBox und einen expliziten ShapeRange verzichtet. Wenn ich Deine Beschreibung richtig verstanden habe, sollte es so auch mit X3 funktionieren. (ich habe X3 nicht, kann es also leider nicht testen) Gruß Koter RE: VBA Objekte ausrichten - fremoikaner - 21.05.2024 Hallo Koter, fast ... ;-) Ich habe noch für s2 ein "nofill" eingebaut, da ich ansonsten ein schwarzes Rechteck hätte. Außerdem den Text noch blau einfärben: sTxt.Text.Story.Fill.UniformColor.CMYKAssign 100, 100, 0, 0 Ich poste den neuen Code mal hier, falls sowas nochmal jemand brauchen kann: Code: Sub rechteck2() Allerdings habe ich mich jetzt doch entschieden, mit meiner Version weiterzumachen, da noch einige Elemente enthalten sind (deshalb auch die vielen weiteren Variablen), die jedoch für die Grundfunktion "Text ausrichten" nicht relevant waren. Mir ist nämlich die Idee gekommen, mein s1.size durch s1.stretch (w/w1) bzw. s1.stretch (h/h1) zu ersetzen. Dabei bleibt der neue Text an der gleichen Stelle und wird über die Mitte neu skaliert. Damit klappt dann alles. Habe es mit allen 4 Varianten (senkrecht/waagrecht; langer Text, kurzer Text) probiert - funzt :-) Wenn ich Dir ein Bier oder auch 2 ausgeben darf, lass' mich bitte wissen wie ... Vielen Dank für Dein Engagement! Gruß fremoikaner RE: VBA Objekte ausrichten - koter - 21.05.2024 Hallo Fremoikaner, (21.05.2024, 16:37)fremoikaner schrieb: ...Wenn ich Dir ein Bier oder auch 2 ausgeben darf, lass' mich bitte wissen wie ... ...hab ich nicht verdient! In meinem Code sind mindestens 2 Fehler. Er dreht zur falschen Seite und vergrößert die gedrehte Schrift. Der Teil zum drehen müsste so aussehen: Code: If sAw.SizeWidth > sAw.SizeHeight Then Ein Fläschchen gönne ich mir trotzdem. (natürlich aus eigenem Bestand) Gruß Koter RE: VBA Objekte ausrichten - fremoikaner - 22.05.2024 Hallo Koter, also ich finde, das Bierchen hast Du Dir mehr als verdient :-) ![]() Ich verwende jetzt doch Dein Makro, da es a) schneller ist b) variabler (durch die Abstands-Variable) und c) mein Makro doch nicht 100% funzt; es hakelt noch wenn die Anzahl der Objekte in der sr >1 ist und diese nicht gruppiert sind. Bevor ich da jetzt noch investiere, nehme ich doch einfach deines. Ich bin jetzt mal für ein paar Tage offline, danach ergänze ich noch meine kleinen Spezialitäten und werde hier nochmal den Code posten. Vielen Dank nochmal und viele Grüße fremoikaner |