VBA, Fragen dazu - 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, Fragen dazu (/showthread.php?tid=38122) |
RE: VBA, Fragen dazu - koter - 10.10.2020 Hallo Olaf, ich habe mir die Datei heruntergeladen, das VBA-Projekt ist dabei! In der VarINI() sollte die Globale Variable „Breit“ mit der Eigenschaft „SizeWidth“ initialisiert werden, nicht mit „SizeHeight“. Code: 'die Globalen Variablen mit Werten füllen Die Eigenschaft „MaxLength“ der Textfelder würde ich schon bei der Initialisierung des Dialogs festlegen, nicht erst bei der Aktivierung. Dazu müsstest Du die Prozedur „UserForm_Initialize()“ anlegen. Code: Private Sub UserForm_Initialize() Wenn Du die Eigenschaft schon beim Einfügen der Textboxen in den Dialog im Eigenschaftsfenster festlegst, brauchst Du gar keinen Code zu schreiben. Die Prozedur „UserForm_Initialize()“ könntest Du Dir dann also sparen: Die Eigenschaften „Value“ und „Text“ der Textfelder verweisen auf den identischen Inhalt. mit dem Befehl TextBox1.Value = 1 überschreibst Du also den Inhalt, der vorher mit TextBox1.Text = GText(Breit) festgelegt wurde. Wenn ich diese Überschreibungen auskommentiere, funktioniert der Dialog. Code: Private Sub UserForm_Activate() 'Textfelder beim aktivieren des Dialogs belegen Auch ich wünsche Dir ein schönes Wochenende. Gruß Koter RE: VBA, Fragen dazu - koter - 10.10.2020 Nachtrag: Die Sub „DeckelPlatzieren()“ steht im Modul „ThisDocument“ und wird vom Ereignis „SelectionChange()“ aufgerufen. Ich würde das Ereignis in diesem Projekt nicht verwenden. Die Ereignisse des Dialogs reichen aus, um die Prozeduren des Projekts auszuführen. Im aktuellen Entwicklungsstadium des Projekts, ist das einzige sinnvoll einzusetzende Dokument-Ereignis das Ereignis „Open()“ um den Dialog zu starten. Das Ereignis „SelectionChange()“ wird bei jeder Änderung der Auswahl im Dokument abgefeuert. Weil Auswahländerungen oft auftreten, tritt dieses Ereignis oft auf. Auswahländerungen werden aber nicht nur durch den Benutzer ausgelöst, auch Makro-Prozeduren können diese auslösen. Das Ereignis ist also schwer vorherzusagen. Es birgt die Gefahr von Endlosschleifen die CorelDraw einfrieren oder komplett abstürzen lassen können. Auch eine Fehlersuche wird nicht gerade vereinfacht. Wenn ich das Ganze hier noch einmal so lang und breit in Schulmeister-Manier wiederhole, dann nicht, um Dir auf die Nerven zu gehen (oder höchstens ein kleines Bisschen). Ich halte es aber für nützlich, noch einmal darüber nachzudenken. Die Sub „DeckelPlatzieren()“ kannst Du ja z.B. in das Plattenmodul verschieben und von der Prozedur „machPlatten()“ ausführen lassen. Code: Sub machPlatten() Gruß Koter RE: VBA, Fragen dazu - Olaf - 12.10.2020 Hallo Koter, vielen Dank. Das Problem ist wahrscheinlich das ich Deinen Code verwendet habe, der teilweise auch aus mindestens 2 Dateien von Dir stammt und den zusammengewürfelt habe und zusätzlich auch noch etwas ergänzt habe. Das ganze dann mit zu wenig Wissen von mir....... Ich versteh mitlerweile ein bisschen vom Code aber immer noch viel zu wenig. Ich gehe den Code nochmal Stück für Stück durch anhand der von Dir genannten Fehler. Vielen Dank und eine schöne Woche. Gruß Olaf RE: VBA, Fragen dazu - Olaf - 12.10.2020 Achso, wegen der Schulmeister-Manier..... Das finde ich genau richtig. Mir fehlt ja definitv einfach ganz ganz viel Grundwissen und da bin ich wirklich für jede Hilfe und jeden Fehler der gefunden wird sehr dankbar. RE: VBA, Fragen dazu - Olaf - 15.10.2020 Hallo Koter, ich habe nun alles, wie von Dir beschrieben, umgestellt. Es funktioniert hervorragend, vielen Dank. Nun werde ich in der nächsten Woche an die große Datei gehen und schauen ob ich alles verstehe. Der Code in der "Baustelle" ist für mich tatsächlich sehr schwierig zu verstehen aber ich bleibe am Ball. Vielen Dank und vorab schonmal ein schönes Wochenende. Gruß Olaf RE: VBA, Fragen dazu - koter - 17.10.2020 Hallo Olaf, in der Baustelle sind die Prozeduren zum Speichern für X7 und zum platzieren. Die auskommentierten Teile habe ich nur zum Testen und zum Erstellen der Fixpunkte aus den roten Linien verwendet (das war mir per Hand zu mühsam). Die Datei habe ich Dir auf diese Frage hin geschickt: (18.09.2020, 11:01)Olaf schrieb: ...Hast Du eine Idee wie man das bestimmen könnten? Ich vermute das ich das mit Wenn dann sonst lösen muss, ich weiss allerdings nicht wie. Wenn es geht, wäre es toll "Wenn dann sonst" nicht für jedes einzelne Teil zu vergeben sondern eventuell schon vorher einzugrenzen durch " Wenn der Wert in dem Feld Breite kleiner ist als 251mm dann nehme nur die Teile aus linken Zeichnung des Deckels.... Mein Vorschlag zur Lösung dieser Aufgabe steht im Dialog-Modul in der Prozedur „CommandButton1_Click()“. Die erste Unterscheidung benutzt „If Then“, danach folgt „Select Case“. Der Programmablaufplan der Prozedur sieht so aus: Die Prozedur „platzieren“ in der Baustelle habe ich nur zum Testen der Prozedur „CommandButton1_Click()“ gebraucht. Ich hatte angenommen, dass Du dazu Deine eigenen Prozeduren schreiben wolltest. Du kannst natürlich auch diese Prozedur verwenden. Durch Deine gut konstruierte Namenskonvention bei den Vorlagen, konnte ich mir die Prozeduren für jede Vorlage sparen und alles von einer Prozedur erledigen lassen. Ein paar kleine Fehler haben sich aber bei den Namen in der Zeichnung eingeschlichen. Ich habe sie jetzt nicht so schnell wiedergefunden, aber ich glaube einige Namen sind doppelt vergeben. Wenn Du das berichtigst, sollte die Prozedur wie geplant funktionieren. Der Prozedur wird als Argument eine Zeichenfolge von der „CommandButton1_Click()“ übergeben. Das Argument wird mit den Namen der Objekte in der Zeichnung durch Befehle für Zeichenfolgen abgeglichen, um die richtige Vorlage auszuwählen. Zur Zerlegung von Zeichenfolgen an Leerzeichen wird die Funktion „Split()“ verwendet, die ein Datenfeld erzeugt. Der Programmablaufplan der Prozedur sieht so aus: Das Setzen von Koordinaten ist im PAP nicht genau beschrieben. Eigenschaften wie „TopY“ oder „CenterX“ hast Du ja schon öfter verwendet. Wenn Du einen Abschnitt im Code genauer untersuchen willst, kannst Du auch Haltepunkte oder den Befehl „Stop“ verwenden: Variableninhalte kannst Du beobachten, wenn Du Überwachungsausdrücke anlegst oder sie im Direktbereich mit „Debug.Print“ ausgeben lässt. Du kannst vielleicht die Variablennamen noch ändern. Der Name der Variable „s“ ist nicht sehr aussagekräftig. Da hätte ich mir etwas mehr Mühe geben können. Ein schönes Wochenende! Gruß Koter Nachtrag: Bei den anderen Beiträgen gab es für von der Forums-Software verkleinerte Bilder eine „Click to enlarge“ - Funktion. Das scheint bei neuen Beiträgen nicht mehr zu funktionieren. Ich habe die PAPs als PDF angehängt weil die Bilder zu klein angezeigt werden. [attachment=21114] RE: VBA, Fragen dazu - Olaf - 26.10.2020 Hallo, vielleicht kann mir ja jemand bei meinem wahrscheinlich kleinen Problem helfen, ich selbst kriege es nicht gebacken. Ich möchte nur die Zeichnung aus einer bestimmten Ebene aus Corel Draw Speichern und nicht das ganze Document. Der Code sieht so aus -------------------------------------------------------------------------------------------------------------------------------- Option Explicit Sub DateiSpeichern() Dim SaveOptions As StructSaveAsOptions Dim Pfad As String Dim Dateiendung1 As String Dim Dateiendung2 As String Set SaveOptions = CreateStructSaveAsOptions Pfad = "\\hb-dc01\work\Hauptordner_FERTIGUNG\_3_LASER\Sonderanfertigung\" Dateiendung1 = "AF_Stck_" Dateiendung2 = ".dxf" With SaveOptions .EmbedVBAProject = True .Filter = cdrDXF .IncludeCMXData = False .EmbedICCProfile = False .Version = cdrVersion20 .Range = cdrAllPages .Overwrite = True .KeepAppearance = True End With ActiveDocument.SaveAsCopy Pfad & Dateiname & Dateiendung1 & Anzahl & Dateiendung2, SaveOptions End Sub ----------------------------------------------------------------------------------------------------------------------------------------- Ich bin mir relativ sicher das ich an der rot markierten Stelle die Ebene bestimmen muss, habe aber diverse Möglichkeiten probiert und es funktioniert nicht. Ich bin mir nicht sicher ob und wenn ja wie ich die Ebene deklarieren muss, da habe ich auch schon diverse Versuche durch. Die Ebene hat den Namen "Export". Veilen Dank für die Hilfe. Gruß Olaf RE: VBA, Fragen dazu - Suc - 26.10.2020 nu frag ich aber auch ma.. bin ja immer hin und weg wenn Herr Koter ma wieder Macros raushaut und über vba doziert.. (irgendwann frag ich ihn ob er mir auch n Macro machen kann um ne Flasche Bier zu öffnen und ich würd mich nich wundern wenn ers könnte....) aber wenn ich nur etwas bestimmtes im Dokument speichern möchte.. dann markier ich das Objekt/e und klick beim" Speichern unter"" nur markierte Objekte" an und das wärs.. dafür brauchts doch kein Macro oder sowas??? verwirrt bin freundlich fragt Suc RE: VBA, Fragen dazu - Olaf - 26.10.2020 Hallo Suc, ich bin auch sehr begeistert wie Koter uns bisher geholfen hat, am Anfang habe ich es exakt so gemacht wie Du es beschrieben hast, wir möchten / müssen das ganze aber ein bisschen automatisieren und vor allem Fehlerfrei hinkriegen. Wir erstellen Laserteile auf Wunschmaß und die Vorlagen dazu werden mit Corel erstellt. Bei einem einzelnen Teil wäre das kein Problem, wenn ich das aber jeden Tag ein paar mal machen möchte sieht es schon anders aus. Beim Starten von Corel öffnet sich eine Dialogfenster und nur dieses soll unser Mitarbeiter nachher benutzen. Es soll eben möglichst auch gnaz ohne Corel Kenntnisse funktionieren. Im Dialog befinden sich Textboxen in die verschiedenen Maße, eine Auftragsnummer und eine Stückzahl eingetragen werden. Durch Command Buttons werden Teile "skaliert" und positioniert und der nächste Command Button speichert die fertige Laserdatei an der von uns benötigten Stelle. Und all das funktioniert Mega. Leider benötigen wir mehrere Ebenen für Erklärungen, Vorlagen usw. und nur die Zeichnungen aus einer Ebene sind relevant für den Laser, alles andere wird dafür nicht benötigt. Daher ist dies für uns tatsächlich sehr wichtig. Gruß Olaf RE: VBA, Fragen dazu - koter - 26.10.2020 Hallo Olaf, da hast Du Dir aber große Mühe mit der Code-Formatierung im Beitrag gegeben! (26.10.2020, 12:51)Olaf schrieb: ...Ich bin mir relativ sicher das ich an der rot markierten Stelle die Ebene bestimmen mus... Nein, Du kannst nur das Dokument-Objekt verwenden, andere Objekte stellen keine Methoden zum Speichern oder Exportieren zur Verfügung. Bei den SaveOptions hast Du aber Einstellungen für CDR-Dateien gewählt. Weil als DXF gespeichert wird, ignoriert Corel diese. Als Range hast Du cdrAllPages gewählt, deshalb wird das gesamte Dokument exportiert. Falls die Variablen „Dateiname“ und „Anzahl“ nicht global sind und von einer anderen Prozedur initialisiert wurden, müsstest Du das in dieser Prozedur noch nachholen. Ich würde aber nicht speichern sondern exportieren und die Einstellungen für die DXF-Datei im Filter vornehmen: Code: Sub ExportDXF() Die Prozedur schaltet (die Export-Ebene ausgenommen) alle Ebenen auf nicht druckbar, damit sie nicht exportiert werden. Du könntest aber auch eine Auswahl erzeugen und nur diese exportieren. Ich benutze weiterhin das Code-Element der Forums-Software. Ich bin einfach zu faul um alles so schön zu formatieren wie Du. Gruß Koter |