- Als neu kennzeichnen
- Lesezeichen
- Abonnieren
- Stummschalten
- RSS-Feed abonnieren
- Kennzeichnen
- Melden
Hi zusammen,
ich würde gerne ein Makro schreiben, das eine vorhandene Zeichnung .idw per Knopfdruck in folgenden Exportdateien ausspielt. Benötigt wird dwg, pdf, und dxf.
Ich habe bereits ein Makro, dass nur nicht ganz nach meinen Bedürfnissen passt und ich daher abändern möchte. Da ich mich in Makro Programmierung nicht auskenne, bin ich auf eure Hilfe angewiesen.
Im Prinzip würde ich dieses vorhandene Makro umschreiben, sodass die Dateinamen der Exportdateien in ein bestimmtes Format ausgegeben werden.
Denn bisher schreibt dieses Makro im folgendem Format:
B70017223_a_001.dwg
B70017223_a_001.pdf
B70017223_a_DBR.dxf
Abändern würde ich dieses Makro jedoch, dass es die Exportdateien mit folgenden iProperties bzw. Texten ausgibt:
Benutzderdef. iPropertie = Zeichnungsnummer
Benutzderdef. iPropertie = SAP-Nummer
Benutzderdef. iPropertie = Bezeichnung DE
Benutzderdef. iPropertie = Revision
Text = ~
Text = 2DDWG
Text = Blatt
Und das im folgenden Format für DWG Dateien:
=Wenn(„Zeichnungsnummer“=WAHR; [Dann „Zeichnungsnummer“]; [Sonst Nix]) oder =Wenn(„SAP-Nummer“=WAHR; [Dann „SAP-Nummer“]; [Sonst Nix]) & „~“ & „2DDWG“ & „~“ & „Bezeichnung DE“ & „~“ & „Blatt“ & „~“ & „Blattanzahl“ & „~“ & „Revision“
Als Beispiel würde es dann für die DWG´s so aussehen:
B49267528~2DDWG~Schweißteil~Blatt_01~a.dwg
Für die PDF´s sollte es dann so aussehen:
B49267528~2DPDF~Schweißteil~Blatt~01~a.pdf
Für die DXF´s sollte es dann so aussehen:
B49267528~2DSBR~Schweißteil~Blatt~01~a.pdf
Ich würde mich auf eure Unterstützung sehr freuen.
Unten habe ich noch das bereits erstelle Makro angehängt. Und im Anhang habe ich noch eine Zeichnung als Beispiel mit den oben genannten iProperties.
Public Const Makropfad = "C:\Tresor-LT-CAD\Verwaltung\Konstruktionsdaten Stile\DWG-DXF\"
Public Sub Export_DWG_DXF_PDF()
On Error GoTo err:
If ThisApplication.ActiveDocumentType <> kDrawingDocumentObject Then
MsgBox "Funktion kann nur in einer Zeichung ausgeführt werden!", vbCritical
Exit Sub
End If
Dim filesystem As Object
Set filesystem = CreateObject("Scripting.FilesystemObject")
'exportdwg.ini erstellen
'ini für DWG
Dim strIniFile As String
strIniFile = Makropfad & "exportdwg.ini"
Call iniSchreiber(strIniFile)
'ini für DXF
Dim strIniFiledxf As String
strIniFiledxf = Makropfad & "exportdxf.ini"
Call iniSchreiberdxf(strIniFiledxf)
Call Update_Zeichnung
Dim Doc As DrawingDocument
Set Doc = ThisApplication.ActiveDocument
Dateiname = FUNC.Speicherpfad(Doc)
' Alle Blätter der IDW durchlaufen
' Wenn Blattname <> "DBR" dann
' Export als DWG mit Dateiname = <IDW_Name>_<Blattname>.dwg
' Export als PDF mit Dateiname = <IDW_Name>_<Blattname>.pdf
'
' Wenn Blattname = DBR UND Ansicht auf Blatt vorhanden (also nicht leer) dann Export als DXF
Dim blatt As Sheet
Dim Dateiname_ohne_ext As String
Dim Dateiname_mit_Blatt_ohne_ext As String
Dateiname_ohne_ext = filesystem.GetParentFolderName(Dateiname) & "\" & filesystem.GetBaseName(Dateiname)
For Each blatt In Doc.Sheets
blatt.Activate
Dateiname_mit_Blatt_ohne_ext = Dateiname_ohne_ext & "_" & Left(blatt.Name, 3)
If Left(blatt.Name, 3) <> "DBR" Then
'Export aktuelles Blatt DWG Dateiname <IDW_Name>_<Blattname>.dwg
Dim DWGAddIn As TranslatorAddIn
Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")
Dim oContext As TranslationContext
Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism
Dim oOptions As NameValueMap
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap
Dim oDataMedium As DataMedium
Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
If DWGAddIn.HasSaveCopyAsOptions(Doc, oContext, oOptions) Then
oOptions.Value("Export_Acad_IniFile") = strIniFile
End If
oDataMedium.Filename = Dateiname_mit_Blatt_ohne_ext & ".dwg"
Call DWGAddIn.SaveCopyAs(Doc, oContext, oOptions, oDataMedium)
'Export aktuelles Blatt PDF Dateiname <IDW_Name>_<Blattname>.pdf
Dim PDFAddIn As TranslatorAddIn
Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
'Set a reference to the active document (the document to be published).
Dim oContextpdf As TranslationContext
Set oContextpdf = ThisApplication.TransientObjects.CreateTranslationContext
oContextpdf.Type = kFileBrowseIOMechanism
' Create a NameValueMap object
Dim oOptionspdf As NameValueMap
Set oOptionspdf = ThisApplication.TransientObjects.CreateNameValueMap
' Create a DataMedium object
Dim oDataMediumpdf As DataMedium
Set oDataMediumpdf = ThisApplication.TransientObjects.CreateDataMedium
' Check whether the translator has 'SaveCopyAs' options
If PDFAddIn.HasSaveCopyAsOptions(Doc, oContextpdf, oOptionspdf) Then
' Options for drawings...
oOptionspdf.Value("All_Color_AS_Black") = 1
'oOptions.Value("Remove_Line_Weights") = 0
oOptionspdf.Value("Vector_Resolution") = 400
oOptionspdf.Value("Sheet_Range") = kPrintCurrentSheet
'oOptions.Value("Custom_Begin_Sheet") = 2
'oOptions.Value("Custom_End_Sheet") = 4
End If
'Set the destination file name
oDataMediumpdf.Filename = Dateiname_mit_Blatt_ohne_ext & ".pdf"
'Publish document.
Call PDFAddIn.SaveCopyAs(Doc, oContextpdf, oOptionspdf, oDataMediumpdf)
End If
If Left(blatt.Name, 3) = "DBR" And blatt.DrawingViews.Count <> 0 Then
'Export als DXF Dateiname <IDW_Name>.dxf
Dim DXFAddIn As TranslatorAddIn
Set DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
Dim oContextdxf As TranslationContext
Set oContextdxf = ThisApplication.TransientObjects.CreateTranslationContext
oContextdxf.Type = kFileBrowseIOMechanism
Dim oOptionsdxf As NameValueMap
Set oOptionsdxf = ThisApplication.TransientObjects.CreateNameValueMap
Dim oDataMediumdxf As DataMedium
Set oDataMediumdxf = ThisApplication.TransientObjects.CreateDataMedium
If DXFAddIn.HasSaveCopyAsOptions(Doc, oContextdxf, oOptionsdxf) Then
' Create the name-value that specifies the ini file to use.
oOptionsdxf.Value("Export_Acad_IniFile") = strIniFiledxf
End If
oDataMediumdxf.Filename = Dateiname_mit_Blatt_ohne_ext & ".dxf"
Call DXFAddIn.SaveCopyAs(Doc, oContextdxf, oOptionsdxf, oDataMediumdxf)
End If
Next
'29.10.2015 Blatt 1 aktivieren
Doc.Sheets.Item(1).Activate
GoTo ende
err:
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFile = fso.CreateTextFile(FUNC.Speicherpfad(ThisApplication.ActiveDocument) & ".FEHLER!")
oFile.WriteLine "Es ist ein Problem aufgetreten"
oFile.Close
Set fso = Nothing
Set oFile = Nothing
ende:
End Sub
Sub Update_Zeichnung()
On Error GoTo err:
Dim Doc As Document
Set Doc = ThisApplication.ActiveDocument
If FUNC.Doktyp(Doc) = "Zeichnung" Then
Dim oDrawDoc As DrawingDocument
Set oDrawDoc = ThisApplication.ActiveDocument
Call oDrawDoc.Update2(True)
Dim osheet As Sheet
Set osheet = oDrawDoc.ActiveSheet
Dim oView As DrawingView
For Each oView In osheet.DrawingViews
oView.IsRasterView = False
Next
'oDrawdoc.Save2 (True)
End If
err:
End Sub
Sub iniSchreiber(iniPfad As String)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
If fso.FileExists(iniPfad) = False Then
Set oFile = fso.CreateTextFile(iniPfad)
'----------------------------------
oFile.WriteLine "[EXPORT SELECT OPTIONS]"
oFile.WriteLine "AUTOCAD VERSION=AutoCAD 2007"
oFile.WriteLine "CREATE AUTOCAD MECHANICAL=No"
oFile.WriteLine "USE TRANSMITTAL=No"
oFile.WriteLine "USE CUSTOMIZE=No"
oFile.WriteLine "CUSTOMIZE FILE=" & Makropfad & "FlatPattern.xml"
oFile.WriteLine "CREATE LAYER GROUP=No"
oFile.WriteLine "PARTS ONLY=No"
oFile.WriteLine "REPLACE SPLINE=No"
oFile.WriteLine "CHORD TOLERANCE=0.001000"
oFile.WriteLine "[EXPORT PROPERTIES]"
oFile.WriteLine "SELECTED PROPERTIES="
oFile.WriteLine "[EXPORT DESTINATION]"
oFile.WriteLine "SPACE=Model"
oFile.WriteLine "SCALING=Geometry"
oFile.WriteLine "ALL SHEETS=No"
oFile.WriteLine "MAPPING=LooksBest"
oFile.WriteLine "MODEL GEOMETRY ONLY=No"
oFile.WriteLine "EXPLODE DIMENSIONS=No"
oFile.WriteLine "SYMBOLS ARE BLOCKED=Yes"
oFile.WriteLine "AUTOCAD TEMPLATE=" & Makropfad & "exportdwg.dwg"
oFile.WriteLine "DESTINATION DXF=No"
oFile.WriteLine "USE ACI FOR ENTITIES AND LAYERS=Yes"
oFile.WriteLine "[EXPORT LINE TYPE & LINE SCALE]"
oFile.WriteLine "LINE TYPE FILE=" & Makropfad & "InvDIN.lin"
oFile.WriteLine "Continuous=Continuous;1."
oFile.WriteLine "Dashed=DASHED;1."
oFile.WriteLine "Dashed Space=DASHED_SPACE;1."
oFile.WriteLine "Long Dash Dotted=LONG_DASH_DOTTED;1."
oFile.WriteLine "Long Dash Double Dot=LONG_DASH_DOUBLE_DOT;1."
oFile.WriteLine "Long Dash Triple Dot=LONG_DASH_TRIPLE_DOT;1."
oFile.WriteLine "Dotted=DOTTED;1."
oFile.WriteLine "Chain=CHAIN;1."
oFile.WriteLine "Double Dash Chain=DOUBLE_DASH_CHAIN;1."
oFile.WriteLine "Dash Dot=DASH_DOT;1."
oFile.WriteLine "Double Dash Dot=DOUBLE_DASH_DOT;1."
oFile.WriteLine "Double Dash Double Dot=DOUBLE_DASH_DOUBLE_DOT;1."
oFile.WriteLine "Dash Triple Dot=DASH_TRIPLE_DOT;1."
oFile.WriteLine "Double Dash Triple Dot=DOUBLE_DASH_TRIPLE_DOT;1."
'----------------------------------
oFile.Close
End If
Set fso = Nothing
Set oFile = Nothing
End Sub
Sub iniSchreiberdxf(iniPfad As String)
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Dim oFile As Object
If fso.FileExists(iniPfad) = False Then
Set oFile = fso.CreateTextFile(iniPfad)
'----------------------------------
oFile.WriteLine "[EXPORT SELECT OPTIONS]"
oFile.WriteLine "AUTOCAD VERSION=AutoCAD 2000"
oFile.WriteLine "CREATE AUTOCAD MECHANICAL=No"
oFile.WriteLine "USE TRANSMITTAL=No"
oFile.WriteLine "USE CUSTOMIZE=No"
oFile.WriteLine "CUSTOMIZE FILE=" & Makropfad & "FlatPattern.xml"
oFile.WriteLine "CREATE LAYER GROUP=No"
oFile.WriteLine "PARTS ONLY=No"
oFile.WriteLine "REPLACE SPLINE=No"
oFile.WriteLine "CHORD TOLERANCE=0.001000"
oFile.WriteLine "[EXPORT PROPERTIES]"
oFile.WriteLine "SELECTED PROPERTIES="
oFile.WriteLine "[EXPORT DESTINATION]"
oFile.WriteLine "SPACE=Model"
oFile.WriteLine "SCALING=Geometry"
oFile.WriteLine "ALL SHEETS=No"
oFile.WriteLine "MAPPING=LooksBest"
oFile.WriteLine "MODEL GEOMETRY ONLY=No"
oFile.WriteLine "EXPLODE DIMENSIONS=No"
oFile.WriteLine "SYMBOLS ARE BLOCKED=Yes"
oFile.WriteLine "AUTOCAD TEMPLATE="
oFile.WriteLine "DESTINATION DXF=Yes"
oFile.WriteLine "USE ACI FOR ENTITIES AND LAYERS=Yes"
oFile.WriteLine "[EXPORT LINE TYPE & LINE SCALE]"
oFile.WriteLine "LINE TYPE FILE=" & Makropfad & "InvDIN.lin"
oFile.WriteLine "Continuous=Continuous;0."
oFile.WriteLine "Dashed=DASHED;0."
oFile.WriteLine "Dashed Space=DASHED_SPACE;0."
oFile.WriteLine "Long Dash Dotted=LONG_DASH_DOTTED;0."
oFile.WriteLine "Long Dash Double Dot=LONG_DASH_DOUBLE_DOT;0."
oFile.WriteLine "Long Dash Triple Dot=LONG_DASH_TRIPLE_DOT;0."
oFile.WriteLine "Dotted=DOTTED;0."
oFile.WriteLine "Chain=CHAIN;0."
oFile.WriteLine "Double Dash Chain=DOUBLE_DASH_CHAIN;0."
oFile.WriteLine "Dash Dot=DASH_DOT;0."
oFile.WriteLine "Double Dash Dot=DOUBLE_DASH_DOT;0."
oFile.WriteLine "Double Dash Double Dot=DOUBLE_DASH_DOUBLE_DOT;0."
oFile.WriteLine "Dash Triple Dot=DASH_TRIPLE_DOT;0."
oFile.WriteLine "Double Dash Triple Dot=DOUBLE_DASH_TRIPLE_DOT;0."
'----------------------------------
oFile.Close
End If
Set fso = Nothing
Set oFile = Nothing
End Sub
Gelöst! Gehe zur Lösung
