![]() |
VBA relative Objekt Position - 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 relative Objekt Position (/showthread.php?tid=38284) |
VBA relative Objekt Position - Pucki - 27.07.2021 Hi ich bin neu hier und habe folgendes Problem. Ich möchte via VBA ein Objekt (Tabelle) erstellen. Das funktioniert leidlich. Er legt die Tabelle an, aber ich weiß zwar noch nicht genau welcher Parameter was bedeutet. Das bekomme ich irgendwie raus. ![]() ABER Corel nimmt als Punkt immer den Mittelpunkt des Objekt. Damit komme ich überhaupt nicht zurecht. Und in der Markoaufzeichnung zeichnet er das irgendwie nicht auf, oder ich übersehe den Befehl, was unwahrscheinlich ist. Gibt es eine Möglichkeit via VBA-Befehl Corel zu sagen das es bei JEDEN Objekt oder für das Objekt immer OBEN LINKS den Punkt nimmt, und dabei direkte Koordinaten nimmt. Global wäre mir lieber, aber wenn es sein muss dann meinetwegen auch für jedes Objekt. Normal im Corel klicke das Objekt an, nehme den Haken bei "relative Position" raus und klicke den Punkt nach Links oben. Aber wie geht das via VBA-Befehl ?? Vielen Dankt für eure Hilfe Gruß Pucki RE: VBA relative Objekt Position - koter - 27.07.2021 Hallo Pucki, willkommen im Forum! Der Befehl lautet: Code: ActiveDocument.ReferencePoint = cdrTopLeft Gruß Koter RE: VBA relative Objekt Position - Pucki - 27.07.2021 Perfekt. Um eine berühmte Dame aus der Werbung zu zitieren. "Hier werden Sie geholfen" Vielen herzlichen Dank. Ich hab sogar heraus gefunden was cdrTopLeft für ein Wert hat, nämlich 3. Der Grund warum ich das wissen muss ist, das ich nicht in VBA direkt schreibe, sondern in VB via Interop. Es geht bei den Projekt darum aus einer Datenbank gewisse Felder in einer Tabelle über mehre Seiten aufzubauen die alle gleich aussehen. Ich könnte das zwar alles von Hand programmieren aber Corel hat da viel mehr Möglichkeiten. Das Problem ist, ich kenne die Befehlssatz von Corel-VBA noch nicht so gut. Da muss ich mich gerade reinfuchsen. ![]() Nochmal vielen Dank Gruß Pucki. RE: VBA relative Objekt Position - Pucki - 27.07.2021 Jetzt brauche ich noch 3 Befehle dann müsste das Projekt laufen. Befehl 1. : Erweitere das Tabellen-Objekt um 1 Zeile. Befehl 2 : Gib mir die Höhe des Tabellen Objekt an Befehl 3 : Die Höhe einer bestimmten Zeile in der Tabelle. Dann nerve ich auch hoffentlich nicht mehr, weil ich denke das ich dann alles habe. Ich hoffe ich kann das hier schreiben ansonsten mache ich ein neuen Thread auf. Vielen Dank für eure Hilfe. Gruß Pucki RE: VBA relative Objekt Position - koter - 27.07.2021 Hallo Pucki, (27.07.2021, 17:42)Pucki schrieb: ...Dann nerve ich auch hoffentlich nicht mehr... Du nervst nicht, das Forum existiert ja zum klären solcher und anderer Fragen! Ich antworte wieder mit Code: Code: Sub Tab1() Eine Frage aus Neugier: Gibt es keinen Reportgenerator oder ähnliches für Deine Datenbank? So etwas mit einem Vektorgrafikprogramm zu machen ist schon ein bisschen schräg. Hoffentlich programmierst Du dich nicht in eine Sackgasse! Gruß Koter RE: VBA relative Objekt Position - Pucki - 28.07.2021 Ups. Mein Fehler : Ich brauche den Befehl wie ICH die Höhe einer bestimmten Zeile setze. Und wie ich die VERTIKALE Ausrichtung in der Tabelle auf zentriert setze, per Programm. Zitat:Eine Frage aus Neugier: Antwort : Das Datenbank-Programm habe ich selbst geschrieben. Im Prinzip ist es eine bisschen Code und eine SQL-Datei. Darin werden Daten aus unterschiedlichen Quellen (Excel/CSV, andere Datenbankformate) in eine gewisse Ordnung gebracht. Preise aufgrund des Hersteller-Rabatt kalkuliert, Texte Angepasst, Eigene Artikel-Nr. vergeben etc. Danach wird eine Datanorm erstellt und was man sonst so alles braucht. Normalerweise wäre die Ausgabe in Excel einfacher. Was ich zur Kontrolle und als Kalkulationshilfe für den Chef eh machen. Auch per INTEROP. Das Problem ist der Ausdruck. Unter Excel bekommt man keinen gescheiten Ausdruck hin. Besonders nicht wenn man noch Grafiken und alles einfügen will ja nach Bedarf. Was nicht bedeutet das Excel nicht drucken kann. Aber die Skalierung zwischen 2 gleichen Seiten ist ein Graus. Davon abgesehen haut ein jede Druckerei das um die Ohren bzw. schreibt eine große Rechnung, weil sie es neu aufbereiten müssen. In meinen Fall habe ich Artikel-Daten drin, und will eine Preisliste daraus machen. Sinn und Zweck der Übung ist es also eine für eine Druckerei geeignete Preisliste mit 1 Klick zu ersten. Meine Software fragt die DB nach relevanten Artikeln ab, und erstellt dann automatisch eine Preisliste, mit Firmenlogo, Einigen Textfelder , z.b. 1 mit den Wort : "Preisliste : " in Arial 18 , ein nächstes mit den Feld :"Stand : 2021" in Arial 12. Dazu noch das Firmenlogo reinkopieren u.s.w. Nun so ab Höhe 200 nach unten die Tabelle mit den Bauteilen. Es gibt eigentlich 2 Möglichkeiten das was ich vor habe zu machen. Möglichkeit 1 : Viel weniger Code = Tabelle erstellen. Möglichkeit 2 : Viele Linien und Textfelder erstellen. Eine Möglichkeit die ich damals benutzt habe, als ich den Ausdruck einer Angebotssoftware geschrieben habe. Und die ich schon alternativ mit Corel getestet habe. Schreiben tut ich das ganze unter VB mit den INTEROP Zugriff au Corel. Ich muss also dein Code in Interop Befehle umwandeln. Ist aber nicht wirklich ein Problem. Hier mal ein Teil des Code von mir. Code: corel.ActivePage.Orientation = 0 Ist weder schön noch optimiert. Das mache ich vielleicht wenn es irgendwann läuft. Zu Lernzwecke ist es mir so lieber. Danach müsste ich also nur noch mit einer For-Next Schleife jede Zelle füllen. FERTIG. Ich hoffe du verstehst nun was das Ziel ist, und warum ich hier euch nerve. Vielleicht hat ja mal ein andere User die selbe IDEE o. eine ähnliche Aufgabe. Nochmal vielen Dank für deine Hilfe. Ist echt ein Krampf Infos über VBA für Corel zu bekommen. Ich habe garantiert gestern 500 Google-Anfragen gemacht Minimum. Man hat den Eindruck VBA für Corel mag keiner o. Corel rückt kaum Infos raus. Ich hab noch nie so wenig Code-Bespiele gesehen. Deshalb bin ich über deine Hilfe sehr dankbar. Gruß Pucki Ps. : Ich weiß das die meisten User Excel für alles mögliche Vergewaltigen. Ich mag aber Corel lieber. Das sieht da Ergebnis besser aus. RE: VBA relative Objekt Position - koter - 28.07.2021 Hallo Pucki, vielen Dank für die ausführliche Antwort! Bei dem von Dir gekennzeichneten Fehler greifst Du auf das Shape-Objekt zu, das die Tabelle (das Custom-Objekt) beinhaltet. Du musst aber auf das Custum-Objekt zugreifen. Hier nochmal als VBA-Code: Code: Sub Tab2() Achte auf die Dim und Set Anweisungen. tab_1C ist ein Unterobjekt von tab_1 . Ich hoffe Du kannst das nach VB übersetzen. Die letzte Version, die ich benutzt habe war VB6. VB.Net unterscheidet sich erheblich von dieser alten Version, beim übersetzen kann ich also leider nicht helfen. Gruß Koter RE: VBA relative Objekt Position - Pucki - 29.07.2021 Vielen Dank für deine Antwort. Die Zeilenhöhe klappt perfekt. Aber die Vertikale Zentrierung schmeißt mir einen Fehler raus. Code: tab_1C.Cells(1).TextShape.Text.Frame.VerticalAlignment = 1 ' Zelle 1 vertikal zentrieren Das klappt nicht. Ich habe den Code in VB und auch als echtes Makro in Corel eingegeben. Die Zeilenhöhe führt er sauber aus. In VB + auch Corel- direkt als Makro. Der Befehl oben zu vertikalen Ausrichtung wird einfach ignoriert. Was mich an den Befehl wundert ist. Er gibt keine Koordinaten an. Code: tab_1c.Custom.Cell(2, 3).TextShape.Text.story.Alignment = 4 funktioniert einwandfrei, Aber leider nur Horizontal. Ein vertikalen Parameter nimmer er komischerweise nicht. Hast du da vielleicht noch eine Idee. Gruß Pucki RE: VBA relative Objekt Position - koter - 29.07.2021 Hallo Pucki, Noch habe ich keine Idee, aber das kann ja noch kommen. Lass bei Dir mal folgende VBA-Sub (So wie sie ist) durchlaufen. Wenn ein Fehler auftritt schreibe mir in welcher Zeile und die Meldung. Code: Sub Tab3() Bei mir läuft die Sub im Einzelschrittmodus so: ![]() Teile mir bitte auch Deine CorelDraw-Version mit und schreibe sie vielleicht auch in Deine Signatur. Bei dem Befehl, bei dem Du die Koordinaten vermisst, habe ich die Cells-Auflistung benutzt. Da gibt es keine Koordinaten, die Zellen werden einfach durchnummeriert. Gruß Koter RE: VBA relative Objekt Position - Pucki - 29.07.2021 JETZT klappt es. Der Fehler war das ich eine Zelle in der 3 Zeile(von 4) 2 Spalte (von 4) aus geguckt habe. Da ein Text rein geschrieben habe, und den dann ausrichten wollte. Corel hat es also nicht ignoriert, sondern einfach nix in nix gemacht . Zitat:Da gibt es keine Koordinaten, die Zellen werden einfach durchnummeriert. AUA. Das ist mir in über 30 Jahren Software-Entwicklung noch nicht bei einer Tabelle vorgekommen. Muss ich mich bei Corel daran gewöhnen oder gibt es auch ein Befehl wo ich die Vertikale Ausrichtung wie bei der horizontalen auch, via X , Y Koordinaten anweisen kann. Ist nämlich echt lästig jedes mal über eine Funktion die Zelle berechnen zu lassen. Wobei mir dann helfen würde, wenn mir Corel sagt wie viele Spalten aktuell hat. Selbst wenn es nicht geht, egal. Du hast mir jede falls Mega geholfen. Muss ich halt eine Extra-Variable setzen + überwachen. Ach was die Frage angeht. Ich habe noch die alte Corel - X4 . Die reicht für das bisschen was ich mache locker aus. Mache bitte folgendes. : Führe deine linke flache Hand an das recht Ohr, und dann über den Hinterkopf zurück. Du darfst dich nun von mir gestreichelt fühlen. ![]() ![]() Gruß Pucki |