| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
|
Autor
|
Thema: PDF erstellen per VBA-Makro (13685 mal gelesen)
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 14. Dez. 2006 16:08 <-- editieren / zitieren --> Unities abgeben:
Hallo, ist es denn wohl möglich, die Ausgabe eines DWG in ein PDF per Makro zu steuern? Da müssten die verschiedenen Eingaben des Plotmenüs erzeugt werden, einschl. Angabe vom PC3 (z.B. Acrobat Destiller), zusätzlich müsste an der richtigen Stelle die PDF-Datei angegeben werden, vielleicht mit GetSaveFileName. Hier im Forum gibt es einen Thread dazu, der endet aber mehr oder weniger ergebnislos. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002
|
erstellt am: 14. Dez. 2006 19:38 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 14. Dez. 2006 20:11 <-- editieren / zitieren --> Unities abgeben:
Hallo, mit PlotToDevice kann ich die Ausgabedatei nicht vorher bestimmen Code: Erg = ThisDrawing.Plot.PlotToDevice("Acrobat Distiller-user.pc3")
Das wäre aber eines meiner Hauptanliegen. Außerdem sollte man die eingestellten DPI kontrollieren und steuern können, weil die sonst auf 1440 stehen und alles lahmlegen. MfG, wwwilli
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002
|
erstellt am: 14. Dez. 2006 20:31 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
wwwilli Mitglied Ingenieur
Beiträge: 410 Registriert: 21.03.2006 ACAD MAP 3D 2012. VestraCAD. Win 7 64bit SP 1, FD 100 GB, Xeon 2,8 GHz, 12 GB.
|
erstellt am: 15. Dez. 2006 15:13 <-- editieren / zitieren --> Unities abgeben:
Ja, vielen Dank. Hat mir sehr geholfen. Der PDF-Ausgabepfad und -name wird jetzt im Makro aufbereitet und in die Zwischenablage gesetzt. Dann starte ich am Ende mit sendcommand "_PLOT " das Plotmenü. An der entsprechenden Stelle werden Pfad und Name "manuell" mit Strg-V eingefügt. Eine gute Lösung, wie mir scheint. MfG, wwwilli Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AWagner Mitglied Software-engineer
Beiträge: 32 Registriert: 27.11.2007
|
erstellt am: 03. Dez. 2007 16:33 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo Leute, ich habe ein Problem beim erstellen von PDF's. Also zur SollSituation: ich möchte aus einer reihe von DWG's jeweils ein PDF machen. (leider haben mir die oben erwähnten beiträge nicht weitergeholfen) ich habs mit folgendem Code probiert: (ist in vb.net geschrieben - der unterschied zu vba ist ja nicht groß Private Sub PrintPDF(ByRef pAutoCAD As Autodesk.AutoCAD.Interop.AcadApplication, ByVal pFileList As Collection) Dim Document As Autodesk.AutoCAD.Interop.AcadDocument = Nothing Dim PlotConf As Autodesk.AutoCAD.Interop.Common.AcadPlotConfiguration Dim Bullzip As Bullzip.PDFPrinterSettings 'free pdf creator Bullzip = New Bullzip.PDFPrinterSettings Bullzip.Init() Try For i As Integer = 1 To pFileList.Count pAutoCAD.Application.Documents.Close() Document = pAutoCAD.Application.Documents.Open(CStr(pFileList.Item(i))) 'öffne DWG PlotConf = Document.PlotConfigurations.Add("MyPDFPlot", False) PlotConf.ConfigName = "BullzipPDFPrinter.pc3" 'manuell erstellt PlotConf.PlotType = Autodesk.AutoCAD.Interop.Common.AcPlotType.acExtents PlotConf.StandardScale = Autodesk.AutoCAD.Interop.Common.AcPlotScale.acScaleToFit PlotConf.PaperUnits = Autodesk.AutoCAD.Interop.Common.AcPlotPaperUnits.acMillimeters PlotConf.CenterPlot = True PlotConf.PlotWithPlotStyles = False PlotConf.ShowPlotStyles = False PlotConf.CanonicalMediaName = "A3" PlotConf.PlotHidden = False PlotConf.PlotRotation = Autodesk.AutoCAD.Interop.Common.AcPlotRotation.ac0degrees PlotConf.RefreshPlotDeviceInfo() Document.Plot.NumberOfCopies = 1 Document.Plot.QuietErrorMode = True Document.SetVariable("BACKGROUNDPLOT", 0) 'speicherort des pdfs einstellen Bullzip.SetValue("Output", "C:\test" & i & " .pdf") 'keinen popupdialog zeigen Bullzip.SetValue("ShowSettings", "never") Bullzip.WriteSettings() If Document.Plot.PlotToDevice(PlotConf) Then Debug.Print("successful") End If Next Catch ex As Exception Debug.Print("PrintPDF - Error: " & ex.Message) Finally If Not Document Is Nothing Then Document.Close() Document = Nothing End If Bullzip = Nothing End Try End Sub Jedoch stürzt er bei der zeile Document.Plot.PlotToDevice(PlotConf) immer mit folgender Meldung ab: "Der Wert liegt außerhalb des erwarteten Bereichs" wenn ich allerdings kein eigenes PlotConfig erstelle und nur Document.Plot.PlotToDevice("BullzipPDFPrinter.pc3") schreibe dann funktioniert es. (Jedoch printet er dann nicht das richtige format usw.) der Bullzip funktioniert einwandfrei ( free pdf creator ) vielleicht weis auch jemand wie ich abfragen kann wann der Plotvorgang beendet ist. vielen Dank schon mal mfg Andreas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TZKonstrukt Mitglied Technischer Zeichner, CAD
Beiträge: 5 Registriert: 12.08.2008 Microsoft XP ACad 2007 Adobe Acrobat 8Std PDMS11.6 Office2003
|
erstellt am: 14. Aug. 2008 16:03 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hiho. Ich weis, dieser Beitrag ist schon über ein halbes Jahr alt aber ich poste mein Anliegen mal hier dazu, weil es ja eigentlich zum Beitrag passt. Ich habe auch ein Problem, wenn ich mehrere Zeichnungen mittels Makro einlese und als PDF (bei mir über Adobe PDF-Drucker (ist vielleicht ein Bestandteil vom Distiller)) ausgeben möchte. Ich habe es damit gelöst, die Eingabeaufforderung vom 'Adobe PDF-Drucker-Treiber' in der Druckeinstellung zu deaktivieren und auf den Allgemeinpfad (bei mir ist es der Desktop des Users (Firmennetzwerk)) die PDF erstellen lasse. Soweit so gut. Jetzt läuft also der Druckvorgang (kann schon einige Sekunden dauern), aber mein Makro will weitermachen, holt sich die nächste Ansicht und will die Drucken.....bäh.. kann er nicht, weil schon ein Vorgang läuft. Desweiteren will ich ja auch die eben erzeugte PDF-Datei auf ein anderes Laufwerk kopieren und die Orginaldatei im Anschluß löschen. Das Programm fragt in einer Do-Loop-Schleife nach der Existens dieser Datei und fährt erst mit dem kopieren fort, wenn die Datei auf dem Desktop angelegt wurde. Find ich aber eine häßliche Lösung, zumal das auch nicht immer klappt. Hab noch eine kleine Verzögerung von 8 Sekunden vor dem Kopiervorgang einbauen müsse, damit das Makro ohne Fehler weiter macht. Meine Frage also: Gibt es in VBA eine Möglichkeit, den Druckstatus von Autocad und/oder vom Drucker(-treiber Adobe PDF) abzufragen und das Makro erst wieder weiterlaufen läßt, wenn er das Ok bekommt? Hier mal ein Codeausschnitt: Private Declare Sub Sleep Lib "kernel32" (ByVal _ dwMilliSeconds As Long) For Each Viewobj In Viewcoll Plotname = Replace(Dateiname, "_001.dwg", "", 1) If Viewobj.Name = "Isometrie" Or InStr(1, Viewobj.Name, "WeldTable") > 0 Then Ansicht_Zoomen Viewobj Application.Update If Viewobj.Name = "Isometrie" Then Plotname = Plotname & "-S01.pdf" Else Plotname = Plotname & "-S0" & CInt(Right(Viewobj.Name, 1)) + 1 & ".pdf" End If ThisDrawing.ActiveLayout.ViewToPlot = Viewobj.Name ThisDrawing.ActiveLayout.PlotType = acView ThisDrawing.Plot.PlotToDevice Plotgerät PDFAusgabeName = Dir(Pfad2Desktop & "*.pdf") 'Warten, bis Datei angelegt wurde Do Until Dir(Pfad2Desktop & "*.pdf") <> "" Loop Sleep (1000) PDFAusgabeName = Replace(Dateiname, ".dwg", " Model (1).pdf", 1) FileSystem.FileCopy Pfad2Desktop & PDFAusgabeName, Pfad & Plotname FileSystem.Kill Pfad2Desktop & PDFAusgabeName Sleep (8000) End If Next Viewobj Gruß TZKonstrukt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
Beiträge: 1358 Registriert: 24.07.2002
|
erstellt am: 14. Aug. 2008 16:10 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
TZKonstrukt Mitglied Technischer Zeichner, CAD
Beiträge: 5 Registriert: 12.08.2008 Microsoft XP ACad 2007 Adobe Acrobat 8Std PDMS11.6 Office2003
|
erstellt am: 15. Aug. 2008 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hi Carsten1210, jup, das funktioniert schon besser . Er meckert zwar immernoch bei der Zeile FileSystem.FileCopy Pfad2Desktop & PDFAusgabeName, Pfad & Plotname wenn ich SLEEP (1000) rausnehme, aber das SLEEP (8000) kann ich rausnehmen. Danke für den Tip. ------------------ Gruß TZKonstrukt [Diese Nachricht wurde von TZKonstrukt am 20. Aug. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TZKonstrukt Mitglied Technischer Zeichner, CAD
Beiträge: 5 Registriert: 12.08.2008 Microsoft XP ACad 2007 Adobe Acrobat 8Std PDMS11.6 Office2003
|
erstellt am: 04. Jun. 2009 15:19 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Tja, ganz so einfach isses am Ende ja doch nicht. Nach ausgibigem Testen des Programms habe ich nun festgestellt, dass die Zeitverzögerung nicht immer was bringt. Die erzeugten PDF's sind manchmal unvollständig, als ob er nicht fertig wurde. Wäre doch ganz gut, den PDF-Erzeugungsprozess irgendwie abfragen zu können. Wer weiß Rat, wie ich in VBA mir Zugriff auf den Status des Druckers "Adobe PDF" verschaffen kann? Weiß ja noch nicht mal, welchen Verweis auf die DLL ich nehmen soll. Habe Adobe Acrobat 8 Standard installiert (incl. Distiller). Gruß TZKonstrukt ------------------ Gruß TZKonstrukt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 04. Jun. 2009 15:29 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hi, bei mir funktioniert es ohne Probleme, ich setze BACKGROUNDPLOT = 0 und warte nach dem Erzeugen noch noch 5 Sekunden bis "das Papier getrocknet ist". Bis jetzt ohne Probleme PS: Die Anwender finden es auch lustig dass, das PDF-Papier trocknen muss ;-)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TZKonstrukt Mitglied Technischer Zeichner, CAD
Beiträge: 5 Registriert: 12.08.2008 Microsoft XP ACad 2007 Adobe Acrobat 8Std PDMS11.6 Office2003
|
erstellt am: 04. Jun. 2009 15:39 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Lol jo lustisch is des. na das mit den 5 secs hab ich auch drinne. trotzdem scheint das system schneller die datei zu verschieben als sie fertig beschrieben ist. manchmal braucht der rechner auch länger, je nach auslastung und größe der Daten. Da gibts doch die Verweisliste im VBA-Modul und dort sind einige Acrobat-Librarys enthalten. Ich hab nur kein Plan in welcher es eine Funktion gibt, die den Status des Druckfortschrittes vom Adobe PDF wiedergibt. ------------------ Gruß TZKonstrukt
[Diese Nachricht wurde von TZKonstrukt am 04. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 04. Jun. 2009 18:50 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
TZKonstrukt Mitglied Technischer Zeichner, CAD
Beiträge: 5 Registriert: 12.08.2008 Microsoft XP ACad 2007 Adobe Acrobat 8Std PDMS11.6 Office2003
|
erstellt am: 05. Jun. 2009 09:27 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Das könnte funktionieren. Nur mit API laden hab ich bisher wenig erfahrung. Aber ich mach mich da mal schlau und probier es mal aus. Nachtrag: Supi. Das funktioniert
Private Declare Function FindWindow Lib "user32" _ Alias "FindWindowA" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Sub Test () ...... Do RetVal = FindWindow(vbNullString, _ "Plot-Aufstragsfortschritt") Loop Until RetVal = 0 ...... End Sub
Danke Stelli1 ------------------ Gruß TZKonstrukt [Diese Nachricht wurde von TZKonstrukt am 05. Jun. 2009 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007
|
erstellt am: 10. Jun. 2009 16:12 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Ich habe mir für diesen Zweck in Excel ein Tool geschrieben, welches unser System nach Zeichnungen(DWG) durchsucht und prüft, ob es davon bereits PLT und PDF Datein gibt. Dann kann man auf Knopfdruck von allen Zeichnungen PLT und PDF erstellen lassen. Excel sagt AutoCAD weche Zeichnung aufgemacht werden soll. Dann wird geprüft ob die Zeichnung frei gegeben ist und die Blattgröße ermittelt. Für verschiedene PDFs hab ich unterschiedliche PC3 vorkonfiguriert. Excel übergibt an AutoCAD die benötigten Druckparameter. Jede PDF wird erstmal in einem bestimmten Verzeichnis auf der Festplatte abgelegt. Speicherort ist in der PC3 Datei festgelegt. Dann wartet Excel 3 Sekunden um sicher zu gehen dass die PDF erstellt wurde. Dateiname = Zeichnungsname. Dann verschiebt Excel die erstellte PDF in das entsprechende Verzeichnis auf dem Server und macht mit der nächsten Zeichnung weiter. Innerhalb weniger Stunden hat man damit einige tausend Zeichnung automatisch als PDF/PLT gedruckt. Macht Spass den Rechner dabei zu beobachten. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fritz101 Mitglied Tischlereitechniker
Beiträge: 4 Registriert: 12.08.2009
|
erstellt am: 12. Aug. 2009 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo insidERR, ich bin seit langem auf der Suche nach so einem Tool zum Drucken von DWG's. Hab auch schon einige Versuche hintermir selbst eine Lösung zu finden. Und so lese ich mich seit einiger Zeit durch sämtliche Foren und bin bis zum jetzigen Zeitpunkt noch nicht wirklich weitergekommen. Nach deiner Beschreibung nach ist dein Tool zu 100% das was ich auch benötige. Jetz wollte ich dich fragen ob es irgenwie möglich ist das auch ich zu diesem genialen Tool komme? Ich weiß das da sicher viel Arbeit dahintersteckt, aber du könntest mir mit dem Tool wirklich weiterhelfen. mfg fritz101 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
insidERR Mitglied 2/3D Konstruktion, VBA/.net/Android/Arduino Programmierung, EDV
Beiträge: 138 Registriert: 27.08.2007 Win10 x64 Pro, ACAD Mech.2024, Inventor 2024 Sim., Vault Pro 2024, VBA/.NET, Android Studio, Arduino
|
erstellt am: 24. Aug. 2009 11:34 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo "fritz101" Sorry, dass ich so spät antworte. Habe hier schon lange nicht geguckt. Habe hier die Exceldatei soweit kommentiert. Wird bei dir aber so nicht laufen, da alles auf unser Systen abgestimmt ist. Musst dich mit "F8" durch das Makro durchklicken und gucken wie es funktioniert. Habe einiges kommentiert. Hoffe du kommst damit klar. Damit Excel die Parameter an AutoCAD übergeben kann muss AutoCAD bereits geöffnet sein. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fritz101 Mitglied Tischlereitechniker
Beiträge: 4 Registriert: 12.08.2009
|
erstellt am: 24. Aug. 2009 19:08 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
fritz101 Mitglied Tischlereitechniker
Beiträge: 4 Registriert: 12.08.2009
|
erstellt am: 24. Aug. 2009 19:53 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
Ex-Mitglied
|
erstellt am: 24. Aug. 2009 19:56 <-- editieren / zitieren -->
Hi, das ZIP ist nicht beschädigt, es hat nur leider Sonderzeichen im Dateinamen. Öffne diesen Link und klicke dann auf die Datei direkt, dann bekommst Du sie herunter. - alfred - ------------------ www.hollaus.at |
fritz101 Mitglied Tischlereitechniker
Beiträge: 4 Registriert: 12.08.2009
|
erstellt am: 24. Aug. 2009 20:35 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
Stelli1 Moderator Verm.-Ing.
Beiträge: 1526 Registriert: 17.08.2005 Map 2000-2014, Rasterdesign, MapGuide, Autodesk Topobase, VS6, VS.net 2013
|
erstellt am: 24. Aug. 2009 22:19 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo zusammen, hier mal ein Codeausschnitt zum drucken mit dem PDF Creator. Ist zwar für Word gemacht, aber das Prinzip lässt sich auch auf AutoCAD übertragen, da oft das Problem besteht den Ausgabenamen zu bestimmen und zu warten bis der Druck fertig ist.
Code: Dim pdfjob As PdfCreator.clsPDFCreator Dim sPDFName As String Dim sPDFPath As String Dim WordApp As Word.Application Dim WordDoc As Word.Document Set WordApp = New Word.Application Set WordApp = GetObject(, "Word.application") WordApp.Visible = True Set WordDoc = WordApp.Documents.Add("wordtestvorlage.dot", , , True) Set WordDoc = WordApp.ActiveDocument Dim Feld As Boolean Dim I As Long For I = 1 To WordDoc.Words.Count '' blabla Next I ' Ausgabedatei sPDFName = "test.pdf" sPDFPath = "C:\Temp\" Set pdfjob = New PdfCreator.clsPDFCreator ' PDFcreator prüfen If pdfjob.cStart("/NoProcessingAtStartup") = False Then MsgBox "Can't initialize PDFCreator.", vbCritical + _ vbOKOnly, "Error!" Exit Sub End If ' Einstellungen With pdfjob .cOption("UseAutosave") = 1 .cOption("UseAutosaveDirectory") = 1 .cOption("AutosaveDirectory") = sPDFPath .cOption("AutosaveFilename") = sPDFName .cOption("AutosaveFormat") = 0 ' 0 = PDF .cClearCache End With ' Drucker in Wird einstellen (Original vorher speichern !) WordApp.ActivePrinter = "PDFCreator" ' Ausdruck starten WordDoc.PrintOut ' Warten bis Word gedruckt hat und der erste Job im Creator ist Do Until pdfjob.cCountOfPrintjobs = 1 DoEvents Loop ' Druck auslösen pdfjob.cPrinterStop = False ' Warten bis der Creator diesen Job abgearbeitet hat Do Until pdfjob.cCountOfPrintjobs = 0 DoEvents Loop pdfjob.cClose Set pdfjob = Nothing
Vielleicht kann es ja einer brauchen Wilfried Stelberg ------------------ Warum lisp'eln wenn's auch anders geht. www.ib-stelberg.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Amatronik Mitglied Zeichner, Entwickler
Beiträge: 5 Registriert: 09.05.2011
|
erstellt am: 09. Mai. 2011 09:38 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
|
Ex-Mitglied
|
erstellt am: 09. Mai. 2011 09:46 <-- editieren / zitieren -->
Hi, herzlich willkommen bei CAD-de! Welchen Link (es gibt in diesem Thread ja mehrere) wäre denn der gewünschte? Sollte es der Beitrag von insidERR sein, dann probiers mal >>>mit diesem Link<<< - alfred - ------------------ www.hollaus.at |
Amatronik Mitglied Zeichner, Entwickler
Beiträge: 5 Registriert: 09.05.2011
|
erstellt am: 13. Mai. 2011 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hi, vielen Dank für die schnelle Antwort. Nun, seit ich die Zeichnungen selbst korrigieren muss, sind mir alle kleinen Helferlein sehr willkommen. Schade, dass es bei CAD mit "skript", "lisp" und "vba" soviele Varianten gibt. Gerade bei VBA wäre für mich ein Recorder sehr hilfreich. In Excel flutscht es da viel besser mit den zeitintensiven Dingen. Mal sehen, ob ich mit dem Code klar komme. Ingolf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
facebraker Mitglied IT
Beiträge: 158 Registriert: 03.05.2009 Windows 7 Professional 64Bit AutoCAD 2007/2008/2009 ProSteel 3D 17.2/18.0/V8i ProStructures V8i_S3 Visual Studio 2010 Ultimate
|
erstellt am: 13. Mai. 2011 12:03 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo Ingolf, so habe ich mir unter Excel die VBA Programmierung auch beigebracht, Makro aufnehmen und dann noch Kontrollstrukturen wie Schleifen drum herum bauen und so entstanden immer bessere Programme. Man lernte auch mit dem Makrorecorder was Excel im Hintergrund machte und lernte auch das Programm kennen. Diese Funktion vermisse ich in AutoCAD auch sehr, wiederkehrende Aufgaben aufnehmen und den so entstanden Code automatisieren oder eine GUI drum herum bauen. Gruß Alex Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Amatronik Mitglied Zeichner, Entwickler
Beiträge: 5 Registriert: 09.05.2011
|
erstellt am: 16. Mai. 2011 17:15 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo, vielleicht bin ich unter diesem Thema mit meinen grundlegenden Fragen nicht ganz an der richtigen Stelle, aber vielleicht könnte der eine oder andere mir doch eine Tipp geben. Die letzten zwei Tage habe ich mich intensiv mit der PDF-Erstellung rumgeplagt, ja, wirklich ;-). Ich habe vor, unter VBA alles noch zu optimieren und möchte gerne Eure Meinungen hören: 1. Einstellung: Plot-Transparenz (rechts bei den Plotoptionen) Dies ist zwar eine Einstellungsoption, den entsprechenden VBA-Befehl kann ich aber nicht finden. Könnte es sein, dass diese relativ neue Einstellung unter VBA nicht mehr gepflegt wird? Ein Hinweis könnte darauf hindeuten. 2. Ich möchte gerne den PDFCreator für die PDF-Erstellung verweden. Ist jemanden eine Möglichkeit bekannt, per VAB dem Tool die Einstellungen zu übergeben, z. B. die Dokumenteneigenschaften, Blattein- stellungen, Name der PDF-Datei, ... Der Grund ist, dass neben unterschiedlichen Blattformaten auch eine fortlaufende Nummer in die Datei- bezeichnung eingepflegt werden soll. Wahrscheinlich würde es gehen, die INI-Datei des Creator zu manipulieren, aber im Moment komme ich dazu nicht! 3. Zeit könnte eingespart werden, wenn ich unter VBA Text dem "Clipboard" übergeben könnte (der nicht Bestandteil der zu plottenden Zeichnung ist), in der Art ".PutInClipbord". Für Excel habe ich so etwas gefunden, aber die Deklaration funktioniert unter AutoCAD nicht (Dim oData As New DataObject). 4. Verstehen kann ich auch nicht die lange Zeit, die nach der VBA-Befehlsübergabe zum Plotten vergeht (ThisDrawing.Plot.PlotToDevice). Erst nach einigen Sekunden erschein das PDFCreator-Fenster. Rufe ich im AutoCAD-Menu den Plott-Befehl (oder _plot) auf, reagiert das Programm sofort. Im Moment habe ich mir damit geholfen, den Befehl unter VBA zu senden, aber ist das die einzigste Möglichkeit [ThisDrawing.SendCommand ("plot" & Chr(13))]? 5. VBA-Entwicklungsumgebung Für VBA (Excel) gibt es von Hans W. Herber (http://www.herber.de/samples/anwendungen.htm "vbePLUSde") eine interessante Erweiterung für den VB-Editor (VBE). Sich oft wiederholender Programmcode oder eigene Lösungen können schnell dem neuen Code übergeben werden. Es handelt sich um ein Add-Inn, dass die Symbolleiste des VBEs erweitert und mit eigenen Lösungen erweitert werden kann. Ich habe mich sehr an dieses Tool gewöhnt. Hat sich jemand dieses AddIn schon für VBA (AutoCAD) erschlossen und Erfahrungen gesammelt? Gruß Ingolf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 16. Mai. 2011 17:51 <-- editieren / zitieren -->
Hi, zu 1) Du kannst mit PLOTTRANSPARENCYOVERRIDE die Plottransparenz für das Plotten überschreiben. zu 2) würde ich mal Einstellungen von AutoCAD aus machen, die PC3 (und wenn dazugehörig) die PMP sind dann Deine heiligen Originale, in welchen die Detaileinstellungen zur Ausgabe enthalten sind. Diese PC3 sprichst Du dann von Deinem VBA-Makro an und fertig. zu 3) da müsste ich wissen, was Du ins Clipboard speichern willst und wohin das 'geliefert' werden soll. zu 4) fehlt mir das Vorstellungsvermögen, Du kannst ja in Deinem Code mal Zeile für Zeile Zeitmessungen einbauen und dann hast Du echte (und nicht gefühlte) Vergleiche. Fest steht natürlich, dass beim OK-klick des Plotdialogs alle Einstellungen (PC3, Seitenformat, Plotstile, ...) schon getätigt sind. Wenn Dein VBA startet, muss es das alles ja erst tun! zu 5) hab ich nicht, sorry HTH, - alfred - ------------------ www.hollaus.at |
Amatronik Mitglied Zeichner, Entwickler
Beiträge: 5 Registriert: 09.05.2011
|
erstellt am: 17. Mai. 2011 18:03 <-- editieren / zitieren --> Unities abgeben: Nur für wwwilli
Hallo Alfred, vielen Dank für Deine Antworten. - Die Systemvariable (?) PLOTTRANSPARENCYOVERRIDE ist mir auch schon untergekommen, ich weiß leider nicht, wie ich sie per VBA ansprechen soll. Kennst Du eventuell einen VBA-Befehl, mit dem man ein <Enter> oder <Abbrechen> einem Einstellungs- fenster in AutoCAD übergeben kann? - Mittlerweile habe ich für die unterschiedlichsten Formate PC3-Dateien; ich würde aber gerne das sich öffnende Fenster des PDFCreators umgehen. Kann man dem PDFCreator irgendwie direkt die Information für seine Konfigurationsdatei übergeben? - Im Makro (AutoCAD) erzeuge ich mir einen Text, den ich im Creator-Fenster gerne als Dateinamen eingeben würde. Im Moment behelfe ich mir mit Excel. Den Inhalt einer Zelle kopieren und dann einfügen; funktioniert zwar, ist aber umständlich. - Die Zeitverzögerung tritt erst mit dem Aufruf des Plottbefehles auf; er rödelt so ähnlich rum, als wenn man aus AutoCAD direkt eine Zeichnung im PDF-Format publizieren möchte. Die Einstellungen für die Seite sind vorher schon komplett (und zügig) ausgeführt. Wie schon geschrieben, mit "plot" flutscht es. Gruß Ingolf
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |