Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  pdf und dxf per VBA erstellen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  pdf und dxf per VBA erstellen (3060 / mal gelesen)
Honigbär
Mitglied
Angestellter


Sehen Sie sich das Profil von Honigbär an!   Senden Sie eine Private Message an Honigbär  Schreiben Sie einen Gästebucheintrag für Honigbär

Beiträge: 158
Registriert: 22.10.2006

CATIA V5 R24
Solid Edge Version 17
Pro-E Wildfire 4.0
Autodesk Inventor Professional 2014
MathCAD 13
Intel Centrino 2 (Pentium III Xeon) 2,53 GHz
6GB RAM
Win 7 Ultimate (64 Bit)
ATI Mobility Radeon HD 4650
SSD von Samsung (Festplatte)

erstellt am: 23. Jan. 2019 17:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,

ich will per VBA gerne aus einer Zeichnung heraus das dxf und pdf Dokument erstellen. Dazu fand ich hier bereits ein Thema:
https://ww3.cad.de/foren/ubb/Forum258/HTML/001423.shtml

Code:
Sub PDFExport()
'Set a reference to the active document (the document to be published).
    Dim oDocument As Document
    Set oDocument = ThisApplication.ActiveDocument
 
    Dim bErr As Boolean
 
    Dim fso As Object
    Set fso = CreateObject("Scripting.FilesystemObject")
    Dim ret As Variant
    Set dDoc = ThisApplication.ActiveDocument
   
      If dDoc.FullFileName = "" Then
        MsgBox "Bitte zuerst die Datei speichern...  "
        Exit Sub
    End If
 
  ' Get the PDF translator Add-In.
    Dim PDFAddIn As TranslatorAddIn
    Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
 
    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = kFileBrowseIOMechanism

' Create a NameValueMap object
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

' Create a DataMedium object
    Dim oDataMedium As DataMedium
    Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
 
    Dim oZeichNr As Inventor.Property
    On Error GoTo ErrorHandler
    Set oZeichNr = dDoc.PropertySets(4).Item("Zeichnungsnummer")

    Dim oBlattNr As Inventor.Property
    On Error GoTo ErrorHandler
    Set oBlattNr = dDoc.PropertySets(4).Item("Blatt")

    Dim oRevNr As Inventor.Property
    On Error GoTo ErrorHandler
    Set oRevNr = dDoc.PropertySets(4).Item("Index")


' Check whether the translator has 'SaveCopyAs' options
    If PDFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then

        'oOptions.Value("All_Color_AS_Black") = 0
        'oOptions.Value("Remove_Line_Weights") = 0
        'oOptions.Value("Vector_Resolution") = 400
        oOptions.Value("Sheet_Range") = kPrintAllSheets
        'oOptions.Value("Custom_Begin_Sheet") = 2
        'oOptions.Value("Custom_End_Sheet") = 4

 
    'Set the destination file name
If bErr = False Then
    oDataMedium.FileName = "C:\GAIN\Exchange\" & "\" & oZeichNr.Value & "-" & oBlattNr.Value & "_" & oRevNr.Value & ".pdf"
Else
    oDataMedium.FileName = "C:\GAIN\Exchange\" & NameSplit(oDocument.FullFileName) & ".pdf"
End If
  End If    'Publish document.
  Call PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)

    MsgBox "PDF wurde unter  -- C:\GAIN\Exchange -- gespeichert!!"

Exit Sub

ErrorHandler:
bErr = True
Resume Next

End Sub

Private Function NameSplit(ByVal sFilename As String) As String

Dim oArray() As String
oArray = Split(sFilename, "\")

NameSplit = Replace(oArray(UBound(oArray)), ".idw", "")

End Function


Da kommt bei mir in der Zeile "Set dDoc = ThisApplication.ActiveDocument" aber der Fehler "Compile Error: Variable not defined". Ich bin da etwas ungeübt. Kann mir bitte jemand sagen wie ich dDoc deklarieren muss?

Wie sage ich VBA, dass ich alle Blätter erstellen will, wenn die idw-Datei mehrere Blätter beinhaltet? Oder tut das Makro dies bereits?

Jetzt fehlt mir noch der dxf-Export in dem Makro. Gibt es da bereits einen Code? Hat vielleicht jemand etwas passendes parat?
Wie sage ich VBA, dass die dxf in der Dateiversion AutoCAD 2004 erstellt werden soll?

Danke und viele Grüße

------------------

Du bist die Aufgabe - Franz Kafka

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 24. Jan. 2019 08:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Honigbär:
Da kommt bei mir in der Zeile "Set dDoc = ThisApplication.ActiveDocument" aber der Fehler "Compile Error: Variable not defined". Ich bin da etwas ungeübt. Kann mir bitte jemand sagen wie ich dDoc deklarieren muss?

ganz einfach. Folgende Zeile vor der Zeile mit dem Fehler einfügen:
Dim dDoc As Document

Hinweis: Das aktive Dokument wird in zwei verschiedene Variablen gehalten: dDoc und oDocument! vmtl. weil das aus verschiedenen Quellen zusammen gesetzt wurde. Das sollte mE vereinheitlicht werden (also nur eine Varible dafür verwenden).

Zitat:
Wie sage ich VBA, dass ich alle Blätter erstellen will, wenn die idw-Datei mehrere Blätter beinhaltet? Oder tut das Makro dies bereits?

das ist bereits enthalten -> oOptions.Value("Sheet_Range") = kPrintAllSheets


------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 24. Jan. 2019 12:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

für den DXF-Export gibt es ein Beispiel in der IV-Hilfe
Export to DXF API Sample
das sollte auch mit IV2014 funktionieren

oder lokal in der API-Hilfe unter dem "TranslatorAddIn Object"

Das mit den Optionen läuft (i.d.R.) so, dass man manuell einen Export durchführt, dabei die gewünschten Einstellungen vornimmt und dann die Möglichkeit nutzt, die Einstellungen in einem .ini-File abzuspeichern. Dieses File kann dann für den Export per VBA gelesen werden (im Beispiel ist es die "C:\tempDXFOut.ini").
In der .ini steht dann u.a. die gewünschte Dateiversion.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Honigbär
Mitglied
Angestellter


Sehen Sie sich das Profil von Honigbär an!   Senden Sie eine Private Message an Honigbär  Schreiben Sie einen Gästebucheintrag für Honigbär

Beiträge: 158
Registriert: 22.10.2006

CATIA V5 R24
Solid Edge Version 17
Pro-E Wildfire 4.0
Autodesk Inventor Professional 2014
MathCAD 13
Intel Centrino 2 (Pentium III Xeon) 2,53 GHz
6GB RAM
Win 7 Ultimate (64 Bit)
ATI Mobility Radeon HD 4650
SSD von Samsung (Festplatte)

erstellt am: 01. Feb. 2019 15:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für deine Antworten Krabby.

Code läuft durch, aber noch mit Fehlern. So sieht er jetzt aus:

Code:
Private Sub btn_dxf_pdf_Click()

'PDF-Erstellung
'Set a reference to the active document (the document to be published).
    Dim oDocument As Document
    Set oDocument = ThisApplication.ActiveDocument
 
    Dim bErr As Boolean
 
    Dim fso As Object
    Dim dDoc As Document
    Set fso = CreateObject("Scripting.FilesystemObject")
    Dim ret As Variant
    Set dDoc = ThisApplication.ActiveDocument
   
      If dDoc.FullFileName = "" Then
        MsgBox "Bitte zuerst die Datei speichern...  "
        Exit Sub
    End If
 
  ' Get the PDF translator Add-In.
    Dim PDFAddIn As TranslatorAddIn
    Set PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
 
    Dim oContext As TranslationContext
    Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
    oContext.Type = kFileBrowseIOMechanism
' Create a NameValueMap object
    Dim oOptions As NameValueMap
    Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

' Create a DataMedium object
    Dim oDataMedium As DataMedium
    Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium
 
    Dim oZeichNr As Inventor.Property
    On Error GoTo ErrorHandler
    Set oZeichNr = dDoc.PropertySets(4).Item("Zeichnungsnummer")

    Dim oBlattNr As Inventor.Property
    On Error GoTo ErrorHandler
    Set oBlattNr = dDoc.PropertySets(4).Item("Blatt")

    Dim oRevNr As Inventor.Property
    On Error GoTo ErrorHandler
    Set oRevNr = dDoc.PropertySets(4).Item("Index")


' Check whether the translator has 'SaveCopyAs' options
    If PDFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then

        'oOptions.Value("All_Color_AS_Black") = 0
        'oOptions.Value("Remove_Line_Weights") = 0
        'oOptions.Value("Vector_Resolution") = 400
        oOptions.Value("Sheet_Range") = kPrintAllSheets
        'oOptions.Value("Custom_Begin_Sheet") = 2
        'oOptions.Value("Custom_End_Sheet") = 4

 
    'Set the destination file name
If bErr = False Then
    oDataMedium.filename = "C:\GAIN\Exchange\" & "\" & oZeichNr.Value & "-" & oBlattNr.Value & "_" & oRevNr.Value & ".pdf"
Else
    oDataMedium.filename = "C:\GAIN\Exchange\" & NameSplit(oDocument.FullFileName) & ".pdf"
End If
  End If    'Publish document.
  Call PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)

    MsgBox "PDF wurde unter  -- C:\GAIN\Exchange -- gespeichert!!"

Exit Sub

ErrorHandler:
bErr = True
Resume Next

'DXF-Erstellung
' Get the DXF translator Add-In.
Dim DXFAddIn As TranslatorAddIn
Set DXFAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC4-122E-11D5-8E91-0010B541CD80}")
   
'Set a reference to the active document (the document to be published).
Set oDocument = ThisApplication.ActiveDocument

Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = kFileBrowseIOMechanism

' Create a NameValueMap object
Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap

' Create a DataMedium object
Set oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

' Check whether the translator has 'SaveCopyAs' options
If DXFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then

    Dim strIniFile As String
    strIniFile = "C:\tempDXFOut.ini"

    ' Create the name-value that specifies the ini file to use.
    oOptions.Value("Export_Acad_IniFile") = strIniFile
End If

'Set the destination file name
oDataMedium.filename = "c:\tempdxfout.dxf"

'Publish document.
Call DXFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)

End Sub

Private Function NameSplit(ByVal sFilename As String) As String

Dim oArray() As String
oArray = Split(sFilename, "\")

NameSplit = Replace(oArray(UBound(oArray)), ".idw", "")

End Function


Zuerst kommt von Inventor die Meldung "DWF-Datei konnte nicht publiziert werden"

Ich wollte doch aber eine pdf erstellen und nicht dwf?

Abschließend kommt vom VBA-Code die Meldung "PDF wurde unter  -- C:\GAIN\Exchange -- gespeichert!!"
Aber da ist nichts und der Ordner "Gain" existiert auch nicht.   

Wie erstelle ich die .ini-Datei, um die gewünschten Einstellungen abzuspeichern?

Die dxf-Datei erstellt er leider auch nicht. Der Pfad C:\ bleibt leer. Da müsste die dxf-Datei ja liegen, wenn ich den Quellcode richtig verstanden habe.

Viele Grüße

------------------

Du bist die Aufgabe - Franz Kafka

[Diese Nachricht wurde von Honigbär am 01. Feb. 2019 editiert.]

[Diese Nachricht wurde von Honigbär am 01. Feb. 2019 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 01. Feb. 2019 17:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

PDF Erstellung: Der Pfad, den du zusammen setzt ist wohl ungültig, weil // enthalten ist ("C:\GAIN\Exchange\" & "\" &...). Das könnte auch schon die ganze Erklärung sein. Sollte es nicht klappen, einen Ordner versuchen, der existiert. Ich weiß nicht, ob der Ordner tatsächlich erstellt werden würde, ggf auch ein Rechtethema.
Dass in der Fehlermeldung von dwf die Rede ist, würde ich vorerst ignorieren.

Dxf:
Soweit läuft das Programm gar nicht, weil es vorher mit "exit sub" beendet wird. Am einfachsten wird es wohl sein, wenn du vor " 'Dxf Erstellung" diese beiden Zeilen einfügst:
  End sub
  Private Sub dxfExp()
Dann fehlt nur noch der zugehörige Aufruf des neuen Sub. Vor der Zeile exit sub einfügen:
  On error goto 0 ' schaltet die Fehlerbehandlung wieder ab
  Call dxfExp()
Das mit der Fehlerbehandlung, damit Fehler im folgenden Ablauf ggf wieder gemeldet werden, anstatt sie zu übergehen.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

KraBBy
Mitglied
Maschinenbau-Ingenieur


Sehen Sie sich das Profil von KraBBy an!   Senden Sie eine Private Message an KraBBy  Schreiben Sie einen Gästebucheintrag für KraBBy

Beiträge: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 01. Feb. 2019 17:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Honigbär 10 Unities + Antwort hilfreich

Ach ja, die Export optionen für dxf
http://help.autodesk.com/view/INVNTOR/2018/DEU/?guid=GUID-0BA0F188-8990-4054-BBEB-41C38F6982F2
Vorletzter Punkt... Konfigurationsdatei speichern...

Da geht's zwar um dwg, sollte aber bei dxf ganz ähnlich aussehen.

------------------
Gruß KraBBy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz