Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  DWG Eportregel Blattname ändern

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:  DWG Eportregel Blattname ändern (796 / mal gelesen)
Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 08. Nov. 2023 11:30    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

ich bin neu hier , verfolge aber viele Foren zum Thema Inventor.
Jetzt habe ich selber ein Thema, wo ich Hilfe bräuchte:
Ich möchte eine DWG-Eportregel schreiben.
Bei einem Export über "Datei" erstellt Inventor bei mehreren Blätter  immer "Zeichnungsnummer":Blatt01" usw.
Ich möchte das aber mit einer Exportregel ändern in "Zeichnungsnummer_01" usw.
In dieser regel sollte auch noch der Pdf expor stehen

Kann mir da jemand helfen?

Klingone1234

[Diese Nachricht wurde von Klingone1234 am 08. Nov. 2023 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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 08. Nov. 2023 13:08    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 Klingone1234 10 Unities + Antwort hilfreich

Zunächst eine etwas naive Frage: Ist hier Hilfe zur Selbsthilfe gefragt, oder soll die fertige Lösung da stehen?

Zum Einstieg das
Save as DWG Translator Sample API Sample. Das ist VBA Code, aber der funktioniert leicht abgewandelt auch als iLogic. btw warum muss es eine iLogic-Regel sein? (um diese Anwendung zu basteln, fände ich VBA vorteilhafter insbesondere durch die Debugging-Möglichkeiten)

Die Optionen für den DWG-Export muss man sich einmal im Dialogfeld zusammenbasteln und mit "Konfiguration speichern" als ini-File abspeichern. Dieses File wird dann der API an die Hand gegeben (siehe API Sample).

Das mit den Blättern funktioniert mE nur "zu Fuß". In den Optionen muss man "Alle Blätter" abwählen, so dass je nur das aktive Blatt exportiert wird. Der Code muss dann in einer Schleife alle Blätter einzeln aktivieren und exportieren. Dabei lässt sich der Dateiname jeweils indivduell festlegen.

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

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 08. Nov. 2023 13:20    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 die Anwtort.

Ich bin bin grad dabei, mir VBA anzueignen und möchte dazu eine Regel zum PDF und DWG Export schreiben, wo ich dann die Blattnamen angepaßt herausbekomme.
In meinem alten Betrieb war das alles schon fertig, aber jetzt muss ich von Grund auf alles selbst machen und das System aufziehen.
Dabei möchte ich auch alle Regeln, die ich so brauche in iLogic und VBA schreiben und bräuchte dafür etwas Hilfe.

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 08. Nov. 2023 15:03    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 Klingone1234 10 Unities + Antwort hilfreich

Hier ein erster Wurf. Ausgehend vom Sample habe ich einen Aufruf dafür geschrieben.
Frag bitte nach, wenn ich etwas genauer erklären soll!

Wenn man diesen Code in ein Modul der Default.ivb kopiert, steht er im IV immer zur Verfügung. Für das Sub "PublishDWG_eachSheet" kann man sich einen Button auf die Benutzeroberfläche legen.


Code:
Option Explicit    'erzwingt, dass jede Variable deklariert werden muss


Sub PublishDWG_eachSheet()

    Dim oDoc As DrawingDocument
    Set oDoc = ThisApplication.ActiveDocument
   
    'Speicherort
    Dim sPath As String
    sPath = "C:\temp\DWG\"
    'hier als Zentraler Speicherort ausgeführt, könnte genauso der Pfad vom aktiven Dok. sein
    ' Das Verzeichnis muss existieren, sonst tritt ein Fehler auf (beim eigentlichen Export)!
   
    'Dateiname
    Dim sFileName As String
    sFileName = oDoc.fullFilename
    If "" = sFileName Then
        MsgBox "Datei noch nicht gespeichert!"
        sFileName = "BlaBlub"  'kA, oder abbrechen
    End If
    sFileName = GetFileName(sFileName)  'ohne Pfad und Dateiendung, Fkt. siehe unten
   
   
    'Abhängig von der Blattanzahl
    If oDoc.Sheets.Count = 1 Then
        Call PublishDWG_activeSheet(sPath, sFileName, oDoc) 'Aufruf für das Sub unten
        'Dateiname ohne Blatt
    ElseIf oDoc.Sheets.Count > 1 Then
        Dim oSheet As Sheet, oLastActiveSheet As Sheet
        Dim i As Integer, sFNinklBlatt As String
        i = 1
        Set oLastActiveSheet = oDoc.ActiveSheet    'aktives Blatt merken
        For Each oSheet In oDoc.Sheets
            oSheet.Activate
            sFNinklBlatt = sFileName & "_" & Format(i, "00")    'BlattNr. zweistellig
            If Not oSheet.ExcludeFromPrinting Then
                'nur exportieren, wenn das Blatt auch gedruckt wird (also NICHT auf "nicht drucken" steht)
                Call PublishDWG_activeSheet(sPath, sFNinklBlatt, oDoc)
            Else 'nix tun
            End If
            i = i + 1
        Next 'oSheet
        oLastActiveSheet.Activate  'zu Beginn akt. Blatt erneut aktivieren
    Else
        MsgBox "Das sollte nicht vorkommen!"
        Exit Sub
    End If

End Sub

' Save as DWG Translator Sample API Sample
' https://help.autodesk.com/view/INVNTOR/2020/ENU/?guid=GUID-E63CAEA6-9977-4640-A73A-B0BD19D2503C
' ### angepasst, so dass die wichtigsten Parameter beim Aufruf übergeben werden ###
Private Sub PublishDWG_activeSheet(sPath As String, sFileName As String, Optional oDocument As Document)
' sPath    : Pfad für die exportierte Datei, mit "\" am Ende!
' sFilename : Dateiname für die exportierte Datei, ohne Dateiendung!
' oDocument : das zu exportierende Dokument, Optional, ggf. wird das aktive Dokument verwendet

    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")

    'Set a reference to the active document (the document to be published).
    'Dim oDocument As Document
    If oDocument Is Nothing Then    'weil optionaler Parameter
        Set oDocument = ThisApplication.ActiveDocument
    Else 'nix weiter tun
    End If

    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

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

        Dim strIniFile As String
        strIniFile = "C:\temp\DWGOut.ini"                  '#### Datei muss existieren und die Optionen enthalten! ua. "All sheets = no" o.ä.
        ' 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:\temp\dwgout.dwg"
    oDataMedium.FileName = sPath & sFileName & ".dwg"

    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)
End Sub

'Hilfsfkt.
Function GetFileName(sDatei_m_Pfad_u_Endung As String) As String
'liefert den Dateinamen ohne Pfad und Dateiendung
'ausgehend vom vollständigen Dateinamen (inkl. Pfad und Endung)
'rein text-basiert. keine Prüfung, ob Dateiexistiert oä.
' Pfad muss nicht enthalten sein
' der Dateiname darf mehrere Punkte enthalten (es wird nur der Text samt dem letzten Punkt entfernt)
'
' Sonderfälle:
' Eingabe ""  -> Rückgabe ""
' kein \ enthalten -> es wird die Dateiendung entfernt
' kein . enthalten -> es wird am Ende nichts entfernt
' kein . nach dem letzten \ aber vorher -> liefert alles nach dem letzten \
'

    GetFileName = ""    'Default-Rückgabewert
    If sDatei_m_Pfad_u_Endung = "" Then Exit Function
   
    Dim s As String
    s = sDatei_m_Pfad_u_Endung 'nur damit nicht der lange VarName mitgeschleppt werden muss
   
    Dim lSlash As Long
    lSlash = InStrRev(s, "\")  'Index von dem letzten BackSlash
    'sollte keiner vorhanden sein, ist das im weiteren kein Problem (lSlash=0, später je +1)
   
    Dim lDot As Long
    lDot = InStrRev(s, ".")    'index vom letzten Punkt
   
    Dim sReturn As String  'wird am Ende zurückgegeben
    If lDot = 0 Then
    'kein Punkt enthalten!
        sReturn = Mid$(s, lSlash + 1)  'am Ende nichts entfernen
    ElseIf lDot < lSlash Then
    'Punkt VOR dem letzten Backslash (also im Pfad)
        sReturn = Mid$(s, lSlash + 1)  'am Ende nichts entfernen
    Else
    'Standardfall: Punkt enthalten, nach dem letzten Backslash
   
        sReturn = Mid$(s, lSlash + 1, lDot - lSlash - 1)
        '+1: Slash soll nicht enthalten sein
        '-1: Punkt soll nicht enthalten sein
    End If
   
    GetFileName = sReturn  'Rückgabewert der Function
   
End Function


Da stecken jetzt schon jede Menge Annahmen drin:

Pfad der Exporte? Zentrales Verzeichnis (*) oder abhängig vom Speicherort des aktiven Dokuments?

Dateiname? "Zeichnungsnummer" ist das der Dateiname des aktiven Dokuments (*)? oder ein iProperty?

Woher soll die angehängte Blattnummer kommen? Vom Namen des Blattes? Oder einfach hochzählen (*)?

Muss die Blatteigenschaft "nicht drucken" berücksichtigt werden? (so dass diese Blätter nicht exportiert werden) (*)

Wenn der Dateiname schon existiert, wird per Default ohne Warnung überschrieben (*). Wenn nicht überschrieben werden kann (z.B. Datei geöffnet), gibt es eine Fehlermeldung. Soll nachgefragt werden, bevor überschrieben wird? Mit welchen Optionen?

(*) soll heißen, dass diese Variante derzeit im Code enthalten ist

Für den Export von PDF gibt es auch ein Beispiel. Wenn der Code soweit verstanden wurde, könntest Du das Bespiel ähnlich anpassen und einen Aufruf dafür schreiben. Das könnte einfacher ausfallen, weil das Gehampel mit den Blättern entfällt (sofern alle Blätter in einem pdf landen dürfen).

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

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 08. Nov. 2023 16:23    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.
das muss ich erst einmal durcharbeiten und verstehen.

Ich bin wie gesagt ganz am Anfang der VBA-Programierung und lerne stetig

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 09. Nov. 2023 10:24    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

Ich hab mit den code mal angesehen und denke, dass er zu kompliziert für mich ist.
Ich möchte einfach nur einen Export von dateiname_Blatt01 in ...01 usw in DWG im selber Odner und PDF mit allen Blättern in eins. Keine Ausnahmen nichts komplziertes.Keine MSGbox

Da ich leider nicht so firm in programieren bin, kann ich die Hälfte des Codes gar nicht zuornen. Bis dahin habe ich noch einen weiten Weg vor mir.

Danke

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 09. Nov. 2023 12:54    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 Klingone1234 10 Unities + Antwort hilfreich

na dann ans Werk!

Folgend ein Update: Speicherort ist nun der Ort der aktiven Zg. Die Zg. muss gespeichert sein (sonst gibt es keinen Speicherort), ich breche das Makro dann ab. Pdf fehlt noch.

Bekommst Du das zum Laufen?

Code:
Option Explicit    'erzwingt, dass jede Variable deklariert werden muss

Sub PublishDWG_eachSheet()

    Dim oDoc As DrawingDocument
    Set oDoc = ThisApplication.ActiveDocument
   
    'Dateiname
    Dim sFileName As String
    sFileName = GetFileName(oDoc.fullFilename)  'ohne Pfad und Dateiendung, Fkt. siehe unten
    If "" = sFileName Then
        MsgBox "Datei noch nicht gespeichert!", vbInformation, "abgebrochen"
        ' Wo soll jetzt gespeichert werden?
        ' unter welchem Dateinamen?
        ' könnte man festlegen, oder auch den User fragen -> FileDialog Object
        Exit Sub    'ich breche hier ab
    End If
   
    'Speicherort
    Dim sPath As String
    sPath = getPathName(oDoc.fullFilename)
    ' Pfad vom aktiven Document
    ' Das Verzeichnis muss existieren, sonst tritt ein Fehler auf (beim eigentlichen Export)!
   
   
    Dim oLastActiveSheet As Sheet
    Set oLastActiveSheet = oDoc.ActiveSheet    'aktives Blatt merken
   
    'Schleife über alle Blätter: Namen zusammensetzen und exportieren
    Dim oSheet As Sheet, i As Integer, sFNinklBlatt As String
    i = 1
    For Each oSheet In oDoc.Sheets
        oSheet.Activate
        sFNinklBlatt = sFileName & "_" & Format(i, "00")    'BlattNr. zweistellig
        If Not oSheet.ExcludeFromPrinting Then
            'nur exportieren, wenn das Blatt auch gedruckt wird (also NICHT auf "nicht drucken" steht)
            Call PublishDWG_activeSheet(sPath, sFNinklBlatt, oDoc)
        Else 'nix tun
        End If
        i = i + 1
    Next 'oSheet
   
    oLastActiveSheet.Activate  'zu Beginn akt. Blatt erneut aktivieren
   

End Sub

' Save as DWG Translator Sample API Sample
' https://help.autodesk.com/view/INVNTOR/2020/ENU/?guid=GUID-E63CAEA6-9977-4640-A73A-B0BD19D2503C
' ### angepasst, so dass die wichtigsten Parameter beim Aufruf übergeben werden ###
Private Sub PublishDWG_activeSheet(sPath As String, sFileName As String, Optional oDocument As Document)
' sPath    : Pfad für die exportierte Datei, mit "\" am Ende!
' sFilename : Dateiname für die exportierte Datei, ohne Dateiendung!
' oDocument : das zu exportierende Dokument, Optional, ggf. wird das aktive Dokument verwendet

    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")

    'Set a reference to the active document (the document to be published).
    'Dim oDocument As Document
    If oDocument Is Nothing Then    'weil optionaler Parameter
        Set oDocument = ThisApplication.ActiveDocument
    Else 'nix weiter tun
    End If

    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

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

        Dim strIniFile As String
        strIniFile = "C:\temp\DWGOut.ini"                  '#### Datei muss existieren und die Optionen enthalten! ua. "All sheets = no" o.ä.
        ' 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:\temp\dwgout.dwg"
    oDataMedium.FileName = sPath & sFileName & ".dwg"

    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)
End Sub

'Hilfsfkt.
Function GetFileName(sDatei_m_Pfad_u_Endung As String) As String
'liefert den Dateinamen ohne Pfad und Dateiendung
'ausgehend vom vollständigen Dateinamen (inkl. Pfad und Endung)
'rein text-basiert. keine Prüfung, ob Dateiexistiert oä.
' Pfad muss nicht enthalten sein
' der Dateiname darf mehrere Punkte enthalten (es wird nur der Text samt dem letzten Punkt entfernt)
'
' Sonderfälle:
' Eingabe ""  -> Rückgabe ""
' kein \ enthalten -> es wird die Dateiendung entfernt
' kein . enthalten -> es wird am Ende nichts entfernt
' kein . nach dem letzten \ aber vorher -> liefert alles nach dem letzten \
'

    GetFileName = ""    'Default-Rückgabewert
    If sDatei_m_Pfad_u_Endung = "" Then Exit Function
   
    Dim s As String
    s = sDatei_m_Pfad_u_Endung 'nur damit nicht der lange VarName mitgeschleppt werden muss
   
    Dim lSlash As Long
    lSlash = InStrRev(s, "\")  'Index von dem letzten BackSlash
    'sollte keiner vorhanden sein, ist das im weiteren kein Problem (lSlash=0, später je +1)
   
    Dim lDot As Long
    lDot = InStrRev(s, ".")    'index vom letzten Punkt
   
    Dim sReturn As String  'wird am Ende zurückgegeben
    If lDot = 0 Then
    'kein Punkt enthalten!
        sReturn = Mid$(s, lSlash + 1)  'am Ende nichts entfernen
    ElseIf lDot < lSlash Then
    'Punkt VOR dem letzten Backslash (also im Pfad)
        sReturn = Mid$(s, lSlash + 1)  'am Ende nichts entfernen
    Else
    'Standardfall: Punkt enthalten, nach dem letzten Backslash
   
        sReturn = Mid$(s, lSlash + 1, lDot - lSlash - 1)
        '+1: Slash soll nicht enthalten sein
        '-1: Punkt soll nicht enthalten sein
    End If
   
    GetFileName = sReturn  'Rückgabewert der Function
   
End Function

Function getPathName(sDatei_m_Pfad_u_Endung As String) As String
'liefert den Pfad ohne Dateiname und Dateiendung
'ausgehend vom vollständigen Dateinamen (inkl. Pfad und ggf. Endung)
'rein text-basiert. keine Prüfung, ob Datei oder Pfad existiert oä.
'
' Sonderfälle:
' Eingabe ""  -> Rückgabe ""
' kein \ enthalten -> Rückgabe ""
' wird bereits ein Pfad angegeben mit \ am Ende, wird dieser unverändert zurückgegeben
'

    getPathName = ""    'Default-Rückgabewert
    If sDatei_m_Pfad_u_Endung = "" Then Exit Function
   
    Dim lSlash As Long
    lSlash = InStrRev(sDatei_m_Pfad_u_Endung, "\")  'Index von dem letzten BackSlash
    If 0 = lSlash Then Exit Function
   
    Dim sReturn As String  'wird am Ende zurückgegeben
   
    sReturn = Left$(sDatei_m_Pfad_u_Endung, lSlash)
    'Slash am Ende ist enthalten!
   
    getPathName = sReturn
   
End Function


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

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 09. Nov. 2023 13: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

Ich kopiere das erstmal und versuche es dann zum Laufen zu bringen.
Vielen dank für Deine super  Hilfe.

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 09. Nov. 2023 14:35    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 Klingone1234 10 Unities + Antwort hilfreich

hier nun auch mit PDF. Es kam im Grunde nur das Sub PublishPDF(...) und ein entsprechender Aufruf hinzu. (Außerdem das aufrufende Sub umbenannt und am Ende eine Meldung ergänzt)

Lass was hören, wie Du vorankommst!

Code:
Option Explicit    'erzwingt, dass jede Variable deklariert werden muss

Sub PublishPDF_DWG_eachSheet()

    Dim oDoc As DrawingDocument
    Set oDoc = ThisApplication.ActiveDocument
   
    'Dateiname
    Dim sFileName As String
    sFileName = GetFileName(oDoc.fullFilename)  'ohne Pfad und Dateiendung, Fkt. siehe unten
    If "" = sFileName Then
        MsgBox "Datei noch nicht gespeichert!", vbInformation, "abgebrochen"
        ' Wo soll jetzt gespeichert werden?
        ' unter welchem Dateinamen?
        ' könnte man festlegen, oder auch den User fragen -> FileDialog Object
        Exit Sub    'ich breche hier ab
    End If
   
    'Speicherort
    Dim sPath As String
    sPath = getPathName(oDoc.fullFilename)
    ' Pfad vom aktiven Document
    ' Das Verzeichnis muss existieren, sonst tritt ein Fehler auf (beim eigentlichen Export)!
   
   
    Dim oLastActiveSheet As Sheet
    Set oLastActiveSheet = oDoc.ActiveSheet    'aktives Blatt merken
   
    'Schleife über alle Blätter: Namen zusammensetzen und DWG exportieren
    Dim oSheet As Sheet, i As Integer, sFNinklBlatt As String
    i = 1
    For Each oSheet In oDoc.Sheets
        oSheet.Activate
        sFNinklBlatt = sFileName & "_" & Format(i, "00")    'BlattNr. zweistellig
        If Not oSheet.ExcludeFromPrinting Then
            'nur exportieren, wenn das Blatt auch gedruckt wird (also NICHT auf "nicht drucken" steht)
            Call PublishDWG_activeSheet(sPath, sFNinklBlatt, oDoc)
        Else 'nix tun
        End If
        i = i + 1
    Next 'oSheet
   
    oLastActiveSheet.Activate  'zu Beginn akt. Blatt erneut aktivieren
   
   
    ' PDF
    Call PublishPDF(sPath, sFileName, oDoc)
   
   
    'Fertigmeldung (sonst merkt der User nicht recht, wann er weitermachen kann)
    MsgBox "Fertig!", , "PDF & DWG"

End Sub

' Save as DWG Translator Sample API Sample
' https://help.autodesk.com/view/INVNTOR/2020/ENU/?guid=GUID-E63CAEA6-9977-4640-A73A-B0BD19D2503C
' ### angepasst, so dass die wichtigsten Parameter beim Aufruf übergeben werden ###
Private Sub PublishDWG_activeSheet(sPath As String, sFileName As String, Optional oDocument As Document)
' sPath    : Pfad für die exportierte Datei, mit "\" am Ende!
' sFilename : Dateiname für die exportierte Datei, ohne Dateiendung!
' oDocument : das zu exportierende Dokument, Optional, ggf. wird das aktive Dokument verwendet

    ' Get the DWG translator Add-In.
    Dim DWGAddIn As TranslatorAddIn
    Set DWGAddIn = ThisApplication.ApplicationAddIns.ItemById("{C24E3AC2-122E-11D5-8E91-0010B541CD80}")

    'Set a reference to the active document (the document to be published).
    'Dim oDocument As Document
    If oDocument Is Nothing Then    'weil optionaler Parameter
        Set oDocument = ThisApplication.ActiveDocument
    Else 'nix weiter tun
    End If

    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

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

        Dim strIniFile As String
        strIniFile = "C:\temp\DWGOut.ini"                  '#### Datei muss existieren und die Optionen enthalten! ua. "All sheets = no" o.ä.
        ' 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:\temp\dwgout.dwg"
    oDataMedium.FileName = sPath & sFileName & ".dwg"

    'Publish document.
    Call DWGAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)
End Sub

'Hilfsfkt.
Function GetFileName(sDatei_m_Pfad_u_Endung As String) As String
'liefert den Dateinamen ohne Pfad und Dateiendung
'ausgehend vom vollständigen Dateinamen (inkl. Pfad und Endung)
'rein text-basiert. keine Prüfung, ob Dateiexistiert oä.
' Pfad muss nicht enthalten sein
' der Dateiname darf mehrere Punkte enthalten (es wird nur der Text samt dem letzten Punkt entfernt)
'
' Sonderfälle:
' Eingabe ""  -> Rückgabe ""
' kein \ enthalten -> es wird die Dateiendung entfernt
' kein . enthalten -> es wird am Ende nichts entfernt
' kein . nach dem letzten \ aber vorher -> liefert alles nach dem letzten \
'

    GetFileName = ""    'Default-Rückgabewert
    If sDatei_m_Pfad_u_Endung = "" Then Exit Function
   
    Dim s As String
    s = sDatei_m_Pfad_u_Endung 'nur damit nicht der lange VarName mitgeschleppt werden muss
   
    Dim lSlash As Long
    lSlash = InStrRev(s, "\")  'Index von dem letzten BackSlash
    'sollte keiner vorhanden sein, ist das im weiteren kein Problem (lSlash=0, später je +1)
   
    Dim lDot As Long
    lDot = InStrRev(s, ".")    'index vom letzten Punkt
   
    Dim sReturn As String  'wird am Ende zurückgegeben
    If lDot = 0 Then
    'kein Punkt enthalten!
        sReturn = Mid$(s, lSlash + 1)  'am Ende nichts entfernen
    ElseIf lDot < lSlash Then
    'Punkt VOR dem letzten Backslash (also im Pfad)
        sReturn = Mid$(s, lSlash + 1)  'am Ende nichts entfernen
    Else
    'Standardfall: Punkt enthalten, nach dem letzten Backslash
   
        sReturn = Mid$(s, lSlash + 1, lDot - lSlash - 1)
        '+1: Slash soll nicht enthalten sein
        '-1: Punkt soll nicht enthalten sein
    End If
   
    GetFileName = sReturn  'Rückgabewert der Function
   
End Function

Function getPathName(sDatei_m_Pfad_u_Endung As String) As String
'liefert den Pfad ohne Dateiname und Dateiendung
'ausgehend vom vollständigen Dateinamen (inkl. Pfad und ggf. Endung)
'rein text-basiert. keine Prüfung, ob Datei oder Pfad existiert oä.
'
' Sonderfälle:
' Eingabe ""  -> Rückgabe ""
' kein \ enthalten -> Rückgabe ""
' wird bereits ein Pfad angegeben mit \ am Ende, wird dieser unverändert zurückgegeben
'

    getPathName = ""    'Default-Rückgabewert
    If sDatei_m_Pfad_u_Endung = "" Then Exit Function
   
    Dim lSlash As Long
    lSlash = InStrRev(sDatei_m_Pfad_u_Endung, "\")  'Index von dem letzten BackSlash
    If 0 = lSlash Then Exit Function
   
    Dim sReturn As String  'wird am Ende zurückgegeben
   
    sReturn = Left$(sDatei_m_Pfad_u_Endung, lSlash)
    'Slash am Ende ist enthalten!
   
    getPathName = sReturn
   
End Function

' Export to PDF API Sample
' https://help.autodesk.com/view/INVNTOR/2020/ENU/?guid=GUID-CD4C38D2-FD05-4A2F-9FA7-C5EC5F845753
' ### angepasst, so dass die wichtigsten Parameter beim Aufruf übergeben werden ###
Private Sub PublishPDF(sPath As String, sFileName As String, Optional oDocument As Document)
' sPath    : Pfad für die exportierte Datei, mit "\" am Ende!
' sFilename : Dateiname für die exportierte Datei, ohne Dateiendung!
' oDocument : das zu exportierende Dokument, Optional, ggf. wird das aktive Dokument verwendet


    ' Get the PDF translator Add-In.
    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 oDocument As Document
    If oDocument Is Nothing Then    'weil optionaler Parameter
        Set oDocument = ThisApplication.ActiveDocument
    Else 'nix weiter tun
    End If

    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

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

        ' Options for drawings...

        oOptions.value("All_Color_AS_Black") = 0

        oOptions.value("Remove_Line_Weights") = 0  ' Linienstärken entfernen; 0=NEIN 1=JA
        oOptions.value("Vector_Resolution") = 300  ' Auflösung 300 dpi sollte reichen, war vorher 400
        oOptions.value("Sheet_Range") = kPrintAllSheets
        '  Values "Sheet_Range": kPrintCurrentSheet    kPrintAllSheets    kPrintSheetRange
        'oOptions.Value("Custom_Begin_Sheet") = 2  'bei kPrintSheetRange
        'oOptions.Value("Custom_End_Sheet") = 4    '

    End If

    'Set the destination file name
    'oDataMedium.FileName = "c:\temp\test.pdf"
    oDataMedium.FileName = sPath & sFileName & ".pdf"

    'Publish document.
    Call PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions, oDataMedium)
End Sub


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

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 11. Jan. 2024 12:57    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

path_and_name = ThisDoc.PathAndFileName(False) ' without extension
PDFAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
oDocument = ThisApplication.ActiveDocument
oContext = ThisApplication.TransientObjects.CreateTranslationContext
oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
oOptions = ThisApplication.TransientObjects.CreateNameValueMap
oDataMedium = ThisApplication.TransientObjects.CreateDataMedium

If PDFAddIn.HasSaveCopyAsOptions(oDokument, oContext, oOptions) Then
oOptions.Value("All_Color_AS_Black") = 1
oOptions.Value("Remove_Line_Weights") = 1
oOptions.Value("Vector_Resolution") = 600
oOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
'oOptions.Value("Custom_Begin_Sheet") = 2
'oOptions.Value("Custom_End_Sheet") = 4
End If

'Set the destination file name
oDataMedium.FileName = path_and_name & "-Description" & ".Revision" & ".pdf"

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

Dateiname = ThisDoc.PathAndFileName(False)
If Dateiname = "" Then
Else
    ThisDoc.Document.SaveAs(ThisDoc.ChangeExtension(".dwg"), True)
End If

System.Runtime.InteropServices.COMException (0x80020005): Typenkonflikt. (Ausnahme von HRESULT: 0x80020005 (DISP_E_TYPEMISMATCH))
  bei Microsoft.VisualBasic.CompilerServices.LateBinding.LateGet(Object o, Type objType, String name, Object[] args, String[] paramnames, Boolean[] CopyBack)
  bei Microsoft.VisualBasic.CompilerServices.NewLateBinding.LateGet(Object Instance, Type Type, String MemberName, Object[] Arguments, String[] ArgumentNames, Type[] TypeArguments, Boolean[] CopyBack)
  bei ThisRule.Main() in Externe Regel: DWG & PDF2:Zeile 18.
  bei Autodesk.iLogic.Exec.AppDomExec.ExecRuleInAssembly(Assembly assem)
  bei iLogic.RuleEvalContainer.ExecRuleEval(String execRule)

Ich bekomme diese Fehler Meldung bei diesem Code. kanmir da jenand helfen?

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 11. Jan. 2024 13:32    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 Klingone1234 10 Unities + Antwort hilfreich

Code:
If PDFAddIn.HasSaveCopyAsOptions(oDokument, oContext, oOptions) Then
If PDFAddIn.HasSaveCopyAsOptions(oDocument, oContext, oOptions) Then

finde den Unterschied   

Abhilfe:
Option Explicit ON    'erste Zeile im Code
Das erzwingt, dass jede Variable deklariert werden muss, z.B.

Code:
Dim path_and_name As String = ThisDoc.PathAndFileName(False) ' without extension
Dim PDFAddIn As ApplicationAddIn = ThisApplication.ApplicationAddIns.ItemById("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
Dim oDocument As Document = ThisApplication.ActiveDocument
Dim oContext = ThisApplication...

Der Aufwand ist es wert, solche Tippfehler lassen sich nur schwer finden...


BTW. bitte füge Code zwischen Code-Tags ein. Das ist besser lesbar.
(CODE) ... (/CODE)  'Eckige Klammern [] statt Runde ()

Der Block am Ende "Dateiname = ..." bringt da nix, weil das pdf da schon geschrieben wurde. Das ist klar, oder?

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

[Diese Nachricht wurde von KraBBy am 11. Jan. 2024 editiert.]

[Diese Nachricht wurde von KraBBy am 11. Jan. 2024 editiert.]

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 11. Jan. 2024 14:11    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 jetzt läuft er.
Der nächste Schritt ist jetzt, dann der noch die Beschreibung und die revision ausliest und in die Dateinamen einfügt.
Dass kommt jatzt auch noch nach und nach.

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 12. Jan. 2024 09:03    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

Es läuft zwar jetzt, aber da ich ein blutiger Anfänger in VBa bin, verstehe ich das meiste nicht.
Ich hab nur den Schreibfehler beseitigt. Beim Einfügen der Konstanten erzeuge ich nur mehr Fehler und die letzte Anmerkung kann ich aus Unwissenheit nicht verstehen, was Du meinst.
Solange es das macht was ich will, ist alles gut.

Danke für deine super Hilfe!

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 12. Jan. 2024 10:51    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 Klingone1234 10 Unities + Antwort hilfreich

Du meinst diesen Satz von mir, den Du nicht verstehst?
Zitat:
Der Block am Ende "Dateiname = ..." bringt da nix, weil das pdf da schon geschrieben wurde. Das ist klar, oder?

Damit habe ich diesen Teil Deines Codes gemeint:

Code:
Dateiname = ThisDoc.PathAndFileName(False)
If Dateiname = "" Then
Else
    ThisDoc.Document.SaveAs(ThisDoc.ChangeExtension(".dwg"), True)
End If

Das bringt deshalb nichts, weil in der Zeile davor die PDF geschrieben wird.
Code:
'Publish document
PDFAddIn.SaveCopyAs(oDocument, oContext, oOptions,oDataMedium)

Ganz grundsätzlich wird der Code Zeile für Zeile abgearbeitet (davon abweichend gibt es Befehle zur "Ablaufsteuerung", wie Bedingungen (if) oder Schleifen). D.h. wenn das Dokument noch nicht gespeichert ist, dann ist Deine Variable 'path_and_name' aus der ersten Zeile leer (Nullstring / ""). Im weitern kommt nicht das gewünschte Ergebnis beim Dateinamen des PDF raus, nehme ich an. Wenn Du eine beim Code-Aufruf ungespeicherte Datei speichern willst, dann ist es wohl gut, das zu Beginn zu tun (also im Code "oben").

------------------
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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 12. Jan. 2024 11:30    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 Klingone1234 10 Unities + Antwort hilfreich

Noch etwas Klug-Sch...erei und damit wir uns richtig verstehen:

Mag sein, dass Du auch Anfänger in VBA bist. Der Code in Deinem Post ist aber iLogic. Ist dieser Unterschied klar?

(iLogic benutzt Syntax von VB.NET. Das ist zwar ähnlich zu VB und VBA, aber es gibt Unterschiede. Im Inventor muss der jeweilige Code in ganz unterschiedliche Editoren geklopft werden.)

Hast Du meinen VBA-Code nicht zum Laufen bekommen?
(weil Du nun PDF per iLogic erzeugen willst)
Ich halte gerade zum Lernen VBA für vorteilhaft, z.B. weil Du den Code Zeile für Zeile ablaufen lassen kannst und dabei in die Variablen und Objekte schauen kannst. Im Gegensatz dazu sind die Debugging-Möglichkeiten bei iLogic sehr begrenzt.

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

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 12. Jan. 2024 13:10    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 das Klug-SCH...
Da ich gerade erst am Anfang bin war mir der Unterschied zu Anfang nicht klar, aber nach vielen Recherchen habe ich das erkannt.
Ich wollte von Anfang an ein iLogic-Regel erstellen. Ich meinem alten Betrieb war das schon alles fertig und ich konnte diese Tools einfach benutzen. Jetzt bin ich in einer neuen Firma, wo ich das 3D-CAD System neu aufbauen muss.Ich habe also bei Null angefangen und musste alle Eistellung und Templates, Normteile usw. selber erstellen bzw. erweitern. Dabei habe ich viel gelernt und jetzt wollte ich noch die iLogic-regel erstellen, die noch so brauche.
Was das Programieren angeht, bin ein absoluter Anfäger und merke, dass ich dort an meine Grenzen stoße. Ich bräuchte eigentlich eine ilogic-Schulung, aber da habe ich noch nichts gefunden.
Ich habe auch schon mal in eine VB.NET-Schulung reingeschaut, aber da fehlt mit irgentwie der Zugang.

Greetz

Klingone1234

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 12. Jan. 2024 13:35    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 Klingone1234 10 Unities + Antwort hilfreich

Ich frage nochmal: Warum iLogic?

Wenn es um die Automatisierung per Ereignisauslöser geht: Man kann mit 1 Zeile iLogic-Code ein VBA-Makro aufrufen.
Man kann auch relativ einfach VBA-Code nach iLogic "übersetzen". Es ist durchaus üblich, Code erst in VBA zu schreiben, um den Ablauf und die API-Befehle zu testen und erst danach in iLogic. (gut, dass ist vielleicht etwas hoch gegriffen. Ich mache das so, aber auch z.B. Brian Ekins)

Edit: ggf. hilfreicher Link
https://inventorfaq.blogspot.com/2018/11/inventor-programmcode-ilogic-und-vba.html

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

[Diese Nachricht wurde von KraBBy am 12. Jan. 2024 editiert.]

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 12. Jan. 2024 14:32    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

Ganz ehrlich keine Ahnung.

Ich habe auf linkedin eine VBA-Exel Schulung für Anfänger absolviert. Ich kann jetzt eingigermaßen einen Code lesen und verstehen, was er macht, aber selber schreiben ist eine ganz andere Sache. iIch habe mich zuvor noch nie mit Programmierung irgendwelcher art beschäftigt und aus meiner Perspektive ist ein sehr schwieriges Thema, zu dem ich keinen richtigen Zugang finde. Eigentlich bin ich ein mausklickendes Ungeheuer mit viel gefährlichem Halbwissen.

Ich bräuchte eine Schulung mit vielen Anwendungsbeispielen, die ich dann durchgehen kann.Leider sind solche Kurse immer mit hohen Kosten verbunden.
Daher kommt diese kollosale Unwissenheit. Ich verstehe ja  nicht mal genau was da drin steht, was du mir geschickt hast.
Dazu fehlt mir die komplette Grundlage.

Sorry aber mehr kann ich nicht

------------------
Greetz

Klingone1234

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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 15. Jan. 2024 12:43    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 Klingone1234 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Klingone1234:
Ich habe auf linkedin eine VBA-Exel Schulung für Anfänger absolviert.

Das ist noch ein zusätzliches Argument für VBA. Deshalb nochmal meine Empfehlung zum Start mit VBA.
Die Entscheidung liegt natürlich bei Dir. Ich helfe Dir auch gern mit iLogic.
(Wie schon geschrieben: diese Entscheidung zwischen VBA und iLogic muss ja auch nicht endgültig sein. Wenn etwas mal als VBA funktioniert, kann man das später immer noch mit iLogic aufrufen oder 'übersetzen'.)

Angenommen, es darf auch VBA werden:
Du kannst den VBA-Editor aufrufen? Du kannst Code in Deine Default.ivb schreiben/kopieren, speichern und ausführen?
Damit kannst Du schon viel rumspielen und ausprobieren.

Probier dann mal den Befehl "Einzelschritt" im Menü "Debuggen" aus, oder gleich Taste F8. (der Cursor muss dafür in einem Sub stehen.) Damit läuft Dein Code Zeile für Zeile ab. Der Inhalt von Variablen wird angezeigt, wenn du mit der Maus drauf zeigst. Im Kontextmenü findest du den Befehl "Überwachung hinzufügen" bei markiertem Variablennamen. Damit wird im Überwachungsfenster der Inhalt der Variable angezeigt und man kann sich durch Objekte hangeln (ein DrawingDocument hat eine Sheets-Eigenschaft, die enthält die einzelnen Blätter als "item 1/2/..." etc.). Ggf. muss im Menü unter Ansicht das Überwachungsfenster eingeschaltet werden (auch das Lokal-Fenster ist nützlich).
F1 und damit die Hilfe ist Dein neuer bester Freund: steht der Cursor in einem Schlüsselwort (egal ob Syntax wie "If" oder Inventor-Object wie "Document") wird mit F1 die entsprechende Hilfeseite angezeigt.
In der Hilfe finden sich auch viele Anwendungsbeispiele bzw. sind unter den Objekten verlinkt.

------------------
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: 702
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 15. Jan. 2024 13:57    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 Klingone1234 10 Unities + Antwort hilfreich

ein Beispiel: Du willst an den Inhalt des iProperty "Revision", bzw. ich denke Du meinst "Revisionsnummer".

ausgehend vom Beispiel aus der Hilfe
API Sample - Get value of iProperty
Liefert leider das iProp "Part Number". Wir wollen aber "Revision" und wissen zunächst nichtmal wie das in der API heißt. Wir sehen ja nur die Benutzeroberfläche ggf. mit deutscher Übersetzung.

Man erkennt im Code evtl. auch schon, dass die iProperties in Property-Sets organisiert sind.

Den Code kopieren und im Einzelschritt ausführen.
Eine Überwachung setzen für das PropSet invDesignInfo.
Im Überwachungsfenster kann man dann sehen, dass dieses Set viele "Item 1", 2, usw. hat. Jedes Item hat einen DisplayName (das ist die Bezeichnung auf der Benutzeroberfläche, ggf. deutsch), aber u.a. auch Name (danach suchen wir) und Value (das ist der Inhalt des iProperty).
Dann stelle ich fest, dass ich kein Item finde mit dem Displayname "Revisionsnummer". Das heißt, das gesuchte iProperty wird sich in einem anderen Set befinden.
Also Überwachung hinzufügen für "invDoc.PropertySets" (oder sich vom invDoc zu PropertySets hangeln), um in die einzelnen PropertySets zu sehen.
Ich werde fündig im Set "Inventor Summary Information" unter "Item 7" (kann bei Dir eine andere Nr. sein). Das iProperty heißt "Revision Number".

So wird daraus

Code:
Public Sub GetPropertySample()
    ' Get the active document.
    Dim invDoc As Document
    Set invDoc = ThisApplication.ActiveDocument
   
    ' Get the design tracking property set.
    Dim invDesignInfo As PropertySet
'    Set invDesignInfo = invDoc.PropertySets.Item("Design Tracking Properties")
    Set invDesignInfo = invDoc.PropertySets.Item("Inventor Summary Information")    'KraBBy
   
    ' Get the part number property.
    Dim invPartNumberProperty As Property
'    Set invPartNumberProperty = invDesignInfo.Item("Part Number")
    Set invPartNumberProperty = invDesignInfo.Item("Revision Number")   'KraBBy
   
    MsgBox "Part Number: " & invPartNumberProperty.value
End Sub

Nun ist der Name der Variable mit invPartNumberProperty nicht mehr treffend, auch der Text in der MsgBox nicht. Das wäre noch zu ändern.
Wenn man nun noch Sub durch Function ersetzt und statt der MsgBox den Inhalt des Property zurückgibt, kann man diese Function schon in anderem Code benutzen.
Code:
Option Explicit

Public Function GetRevision()
'liefert den Inhalt des iProperty "Revisionsnummer" vom aktiven Dokument
   
    ' Get the active document.
    Dim invDoc As Document
    Set invDoc = ThisApplication.ActiveDocument
   
    ' Get the design tracking property set.
    Dim invDesignInfo As PropertySet
'    Set invDesignInfo = invDoc.PropertySets.Item("Design Tracking Properties")
    Set invDesignInfo = invDoc.PropertySets.Item("Inventor Summary Information")    'KraBBy
   
    ' Get the part number property.
    Dim invPartNumberProperty As Property
'    Set invPartNumberProperty = invDesignInfo.Item("Part Number")
    Set invPartNumberProperty = invDesignInfo.Item("Revision Number")   'KraBBy
   
'    MsgBox "Part Number: " & invPartNumberProperty.value
   
    'Rückgabewert der Function ( [Name der Function] = "Wert" )
    GetRevision = invPartNumberProperty.value
End Function

Sub Test_Aufruf()
   
    Dim s As String
    s = "mein Text + Rev.: "
   
    Dim r As String
    r = GetRevision()   'Aufruf der Function
    s = s & r
   
    'oder etwas kürzer ohne Variable r
    s = "mein Text + Rev.: " & GetRevision()
   
    MsgBox s
End Sub


Edit: "Option Explicit" als erste Codezeile ergänzt. Das Pendant in VBA zum "Option Explicit ON" in iLogic. Den Sinn habe ich ja schonmal geschrieben.
Edit 2: Link funktionierte nicht; Link-URL angepasst

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

[Diese Nachricht wurde von KraBBy am 15. Jan. 2024 editiert.]

[Diese Nachricht wurde von KraBBy am 15. Jan. 2024 editiert.]

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

Klingone1234
Mitglied



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

Beiträge: 14
Registriert: 08.11.2023

erstellt am: 15. Jan. 2024 16: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, dass Du mit das erklären willst, aber so ist das schon wieder ein weinig mühsam für mich.
Ich brauche eine richtige Schulung ,mit Dozent und Übungen.

Ich weiß es sehr zu schätzten, dass du versuchst, mir VBA beizubringen, aber so funktioniert das bei mir leider nicht.

Die Hälfe sind für mich schon wieder böhmische Dörfer.

Danke nochmal für Deine Mühe.

------------------
Greetz

Klingone1234

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)2024 CAD.de | Impressum | Datenschutz