Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Pfad 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:  Pfad erstellen (1077 mal gelesen)
OibelTroibel
Mitglied
Konstrukteur


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

Beiträge: 536
Registriert: 18.04.2014

ACAD/Inventor 2018-21

erstellt am: 16. Apr. 2020 14:59    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 habe ein Code, welcher von einer Baugruppe eine alle enthaltenen Zeichnungsableitungen checkt und diese als PDF in eine parametrisierte Ordnerstruktur abspeichert. Leider werden die Ordner nur erstellt, wenn nicht zu viele Zwischenordner erstellt werden müssen. Das heisst wenn vom Zielpfad C:\1\2\3\4\5\6\7\ nur C:\1\2\3\4\5 vorhanden ist werden die Ordner 6\7\ nicht erstellt und das PDF nicht exportiert, ist aber C:\1\2\3\4\5\6\ vorhanden, wird 7\ erstellt und das PDF exportiert.

Komischerweise exportiere ich mit einem sehr ähnlichen Code alle Bauteile einer Baugruppe in die selbe Ordnerstruktur und der Zielpfad wird erstellt unabhängig wie viele Zwischenordner erstellt werden müssen.

Ich habe folgende Snippets getestet:

Code:
If Dir(Zielpfad, vbDirectory) = "" Then
MkDir Zielpfad
End If

Code:
If Not objFso.FolderExists(Zielpfad) Then objFso.CreateFolder Zielpfad

Den ersten Code verwende ich beim Step-Export und funktioniert wunderbar. Beim PDF Export funktioniert es nur, wenn ich zuerst die Step-Daten exportiere und danach die PDFs, da dann die Ordner bereits erstellt sind.

Hat jemand eine Ahnung warum das so sein könnte?
Den ganzen Code kann ich leider nicht veröffentlichen.

Beste Grüsse
Raphael

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 17. Apr. 2020 05: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 Nur für OibelTroibel 10 Unities + Antwort hilfreich

Moin

Der mkdir-Befehl kann nicht mehrere Ordnerebenen gleichzeitig anlegen. Mit dem Schnipsel Code spekuliere ich nicht über mögliche Ursachen, warum es mal geht und mal nicht.
Du kannst in einer kurzen Schleife stückweise deinen Zielpfad prüfen und ggf. erstellen:

Code:

Privat Sub MultiPathCreate()
Dim ZielPfad As String
Dim TeilPfad As String
Dim Pfadteile
Dim i

ZielPfad = "c:\ebene1\ebene2\ebene3"

Pfadteile = Split(ZielPfad, "\")
TeilPfad = Pfadteile(0)
For i = 1 To UBound(Pfadteile)
    TeilPfad = TeilPfad & "\" & Pfadteile(i)
    If Dir(TeilPfad, vbDirectory) = "" Then MkDir TeilPfad
Next

End Sub



Oder du nutzt externe dll's, die die gleiche Funktionalität beinhalten.

Code:

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long

Sub CreateMultiplePath()
Dim strPath As String

strPath = "c:\ebene1\ebene2\ebene3\"

If MakeSureDirectoryPathExists(strPath) <> 0 Then
  MsgBox "Der Pfad : " & strPath & " wurde erfolgreich angelegt!"
End If

End Sub


------------------
MfG
Ralf

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

OibelTroibel
Mitglied
Konstrukteur


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

Beiträge: 536
Registriert: 18.04.2014

ACAD/Inventor 2018-21

erstellt am: 17. Apr. 2020 08:22    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

Guten Morgen Ralf

Vielen Dank für deine Hilfe. Ich werde es mit deiner Schleife machen und gleich versuchen.
Ist es möglich, dass das Step-Export Sample von der API-Hilfe den Pfad erstellt?

Code:
Public Sub StepExport(Zielpfad, oRefDoc)
       
        Dim oSTEPTranslator As TranslatorAddIn
        Set oSTEPTranslator = ThisApplication.ApplicationAddIns.ItemById("{90AF7F40-0C01-11D5-8E83-0010B541CD80}")
   
        If oSTEPTranslator Is Nothing Then
            MsgBox "Verbindung zum STEP-Translator fehlgeschlagen."
            Exit Sub
        End If
   
        Dim oContext As TranslationContext
        Set oContext = ThisApplication.TransientObjects.CreateTranslationContext
        Dim oOptions As NameValueMap
        Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap
        If oSTEPTranslator.HasSaveCopyAsOptions(oRefDoc, oContext, oOptions) Then
            'Step Protokoll definieren
            '2 = AP 203 - Konfigurationsgesteuerte Konstruktion
            '3 = AP 214 - Automobil-Konstruktion
            '4 = AP 242 - Auf verwaltetem Modell basierende 3D-Konstruktion
            oOptions.Value("ApplicationProtocolType") = 4
   
            ' verfügbare Optionen
            oOptions.Value("Author") = ThisApplication.GeneralOptions.UserName
            'oOptions.Value("Authorization") = ""
            'oOptions.Value("Description") = ""
            'oOptions.Value("Organization") = ""
   
            oContext.Type = kFileBrowseIOMechanism
           
            Dim oDocRevision As Property
            Dim Revision As String
            Set oDocRevision = oRefDoc.PropertySets.Item("Inventor Summary Information").Item("Revision Number")

            Dim oData As DataMedium
            Set oData = ThisApplication.TransientObjects.CreateDataMedium
           
            If oDocRevision.Value = "" Then
                oData.FileName = Zielpfad & oRefDoc.DisplayName & ".stp"
            Else
                Revision = "_Rev-" + CStr(oDocRevision.Value)
                oData.FileName = Zielpfad & oRefDoc.DisplayName & Revision & ".stp"
            End If
           
            'Dokument publizieren
            Call oSTEPTranslator.SaveCopyAs(oRefDoc, oContext, oOptions, oData)
        End If
End Sub


Mir ist nämlich aufgefallen, dass die Ordnerstruktur erst nach dem

Code:
Call oSTEPTranslator.SaveCopyAs(oRefDoc, oContext, oOptions, oData)
erstellt wird und das über mehrere Ordner.

Mit dem PDF Export Sample kein ich aber gleiches Verhalten nicht beobachten, bzw. gibts den Ordner nicht, wird dieser auch nicht erstellt und somit das PDF nicht exportiert.

Code:
Public Sub PDFExport(Zielpfad, oRefDoc)
    ' 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 oData As DataMedium
    Set oData = ThisApplication.TransientObjects.CreateDataMedium

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

        ' Options for drawings...

        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
    End If

    Dim oDocRevision As Property
    Dim Revision As String
    Set oDocRevision = oRefDoc.PropertySets.Item("Inventor Summary Information").Item("Revision Number")

    If oDocRevision.Value = "" Then
        oData.FileName = Zielpfad & oRefDoc.DisplayName & ".pdf"
    Else
        Revision = "_Rev-" + CStr(oDocRevision.Value)
        oData.FileName = Zielpfad & oRefDoc.DisplayName & Revision & ".pdf"
    End If

    If Not objFso.FolderExists(Zielpfad) Then objFso.CreateFolder Zielpfad
    'Publish document.
    Call PDFAddIn.SaveCopyAs(oRefDoc, oContext, oOptions, oData)
End Sub


Das

Code:
If Dir(Zielpfad, vbDirectory) = "" Then
MkDir Zielpfad
End If

Habe ich im Hauptprogramm vorgelagert aber hat wohl bei PDF- und Step-Export kein Erfolg.

Beste Grüsse
Raphael

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

rkauskh
Moderator
Dipl.-Ing. (FH) Versorgungstechnik




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

Beiträge: 2166
Registriert: 15.11.2006

Windows 10 x64, AIP 2022

erstellt am: 18. Apr. 2020 08:02    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 OibelTroibel 10 Unities + Antwort hilfreich

Moin

Was die Translatoren intern alles machen behält Autodesk für sich. Das der eine den kompletten Zielpfad erstellt und der andere nicht, halte ich durchaus für möglich. Ich vermute mal, die beiden Translatoren wurden in verschiedenen Jahren und von verschiedenen Programmierern erstellt. Da ist gleiches Programmverhalten eher Zufall. 

------------------
MfG
Ralf

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