Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Makro nur in der Baugruppe ausführen

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:  Makro nur in der Baugruppe ausführen (633 / mal gelesen)
Kath878
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 31.08.2018

Inventor 2021, Vault 2021

erstellt am: 16. Mai. 2022 12:26    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 liebes Forum,
kann mir jemand helfen, diesen Code anzupassen? Es funktioniert sehr gut, jedoch möchte ich, dass dieser nur in der Baugruppe ausgeführt wird, nicht beim Speichern einer Datei. Da kommt immer ein Fehler, weil er ein Problem hiermit hat:  Set oDoc = ThisApplication.ActiveDocument
Meine VBA-Kenntisse sind leider nicht besonders.

Public Sub BOMSort()
  ' Set a reference to the assembly document.
    ' This assumes an assembly document is active__Setzen Sie einen Verweis auf das Baugruppendokument.
    ' Dies setzt voraus, dass ein Baugruppendokument aktiv ist.
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.ActiveDocument

    ' Set a reference to the BOM___Setzen Sie einen Verweis auf die Stückliste
    Dim oBOM As BOM
    Set oBOM = oDoc.ComponentDefinition.BOM

  Dim FirstLevelOnly As Boolean
       
    'If MsgBox("First level only?", vbYesNo) = vbYes Then
    '    FirstLevelOnly = True
    ' Else
    '    FirstLevelOnly = False
    ' End If


    ' Make sure that the structured view is enabled___Stellen Sie sicher, dass die strukturierte Ansicht aktiviert ist.
    oBOM.StructuredViewEnabled = True

' Set a reference to the "Structured" BOMView___Setzen Sie einen Verweis auf die „Structured“ BOMView
    Dim oStructuredBOMView As BOMView
    Set oStructuredBOMView = oBOM.BOMViews.Item("Strukturiert")

    Call oStructuredBOMView.Sort("Bauteilnummer")
    Call oStructuredBOMView.Renumber(1, 1)

' Set a reference to the "onlyParts" BOMView__Setzen Sie einen Verweis auf die BOMView "onlyParts".
    Dim oonlyPartsBOMView As BOMView
    Set oonlyPartsBOMView = oBOM.BOMViews.Item("nur Bauteile")

    Call oonlyPartsBOMView.Sort("Bauteilnummer")
    Call oonlyPartsBOMView.Renumber(1, 1)
 
End Sub


Danke

------------------
Gruß Kathrin

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: 16. Mai. 2022 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 Nur für Kath878 10 Unities + Antwort hilfreich

Hallo

Ergänz mal diese Zeile:

Code:

Public Sub BOMSort()

'##################Schnipp###########
If Not ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then Exit Sub
'##################Schnipp###########
  ' Set a reference to the assembly document.


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

RKW Solutions GmbH
www.RKW-Solutions.com

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

Kath878
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 31.08.2018

Inventor 2021, Vault 2021

erstellt am: 16. Mai. 2022 14:12    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

Dankeschön.

hab es hier eingefügt

' Set a reference to the BOM___Setzen Sie einen Verweis auf die Stückliste
    Dim oBOM As BOM
    Set oBOM = oDoc.ComponentDefinition.BOM
    If Not ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then Exit Sub

Ich hoffe, das war richtig.

------------------
Gruß Kathrin

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: 16. Mai. 2022 14:29    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 Kath878 10 Unities + Antwort hilfreich

Hallo

Äh nö. Das muss ganz nach oben. Sonst steigt dein Code bereits bei

Code:
Set oDoc = ThisApplication.ActiveDocument

aus. Die Abfrage des Dokumententyps direkt an den Anfang der Sub.

Wie löst du beim Speichern ein VBA Makro aus? Auto-Makros sollten in VBA schon seit Jahren nicht mehr funktionieren.

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

RKW Solutions GmbH
www.RKW-Solutions.com

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

Kath878
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 31.08.2018

Inventor 2021, Vault 2021

erstellt am: 16. Mai. 2022 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

So richtig? Wie gesagt meine Kenntnisse sind hierzu nicht besonders gut.

Public Sub BOMSort()
  ' Set a reference to the assembly document.
    ' This assumes an assembly document is active__Setzen Sie einen Verweis auf das Baugruppendokument.
    ' Dies setzt voraus, dass ein Baugruppendokument aktiv ist.
    If Not ThisApplication.ActiveDocument.DocumentType = kAssemblyDocumentObject Then Exit Sub
    Dim oDoc As AssemblyDocument
    Set oDoc = ThisApplication.ActiveDocument

Ich lass den Makro über eine Regel ausführen
InventorVb.RunMacro("Anwendungsprojekt", "StücklisteSortieren", "BOMSort")

------------------
Gruß Kathrin

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: 16. Mai. 2022 15: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 Kath878 10 Unities + Antwort hilfreich

Da wird die Zeile ihren Zweck erfüllen.

Mir stellt sich die Frage, warum sie nötig ist. Im Ereignisauslöser kann man die Regel so definieren, dass sie nur bei Assemblies ausgeführt wird.

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

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: 16. Mai. 2022 16:09    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 Kath878 10 Unities + Antwort hilfreich

Hallo

Jepp, passt.
Über iLogic ein VBA Makro aufrufen ist nur so mittelprächtig. Es wäre besser das bei Gelegenheit mal komplett in iLogic zu übertragen. Macht der Kollege KraBBy    mit mehr Freizeit sicher mal die nächsten Tage und erklärt dir auch gleich wie du deinen Ereignisauslöser richtig auswählst.

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

RKW Solutions GmbH
www.RKW-Solutions.com

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

Kath878
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 31.08.2018

Inventor 2021, Vault 2021

erstellt am: 16. Mai. 2022 16:14    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 vielmals.

Die Regel ist eigentlich bei den Ereignisauslösern, nur bei der Baugruppe "vor dem Speichern aktiviert".
Für mich sind das alles halbe bis ganze böhmische Dörfer. Ich bin schon froh, wenn ich ein Makro finde und es irgendwie zum laufen kriege. Winzige Anpassungen bekomme ich hin, dann aber hört es auf.


Das wäre natürlich ein Traum ...
Über iLogic ein VBA Makro aufrufen ist nur so mittelprächtig. Es wäre besser das bei Gelegenheit mal komplett in iLogic zu übertragen. Macht der Kollege KraBBy mit mehr Freizeit sicher mal die nächsten Tage und erklärt dir auch gleich wie du deinen Ereignisauslöser richtig auswählst.

------------------
Gruß Kathrin

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: 16. Mai. 2022 17: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 Kath878 10 Unities + Antwort hilfreich

na wenn mich Ralf schon einteilt 

Hier der Code in iLogic

Code:
' für Assembly-Dokumente, BOM
' Strukturiert UND nurBauteile wird aktiviert
' je sortiert nach BauteilNr.
' neu nummeriert
'
' übertragen von VBA nach iLogic


Const bDebug As Boolean = True
'KraBBy: Schalter, um einige Meldungen in dieser Regel etc. Zentral ein/auszuschalten


'KraBBy: Dateiname merken (wird für Meldungen benutzt)
Dim sFileName As String = ThisDoc.FileName(False)

'DokumentTyp prüfen
If Not TypeOf ThisDoc.Document Is AssemblyDocument Then
If bDebug Then MsgBox("falscher Doc-Type" & vbCrLf & sFileName, vbOKOnly, "BOMSort - Abbruch")
Exit Sub
End If
'ThisDoc.Document verwendet statt
'ThisApplication.ActiveDocument
' weil die Regel ggf. auch bei untergeordneten Bgr. ausgeführt wird/werden soll
' (ThisDoc liefert das Document, in dem die Regel gerade läuft)

  ' Set a reference to the assembly document.
    ' This assumes an assembly document is active__Setzen Sie einen Verweis auf das Baugruppendokument.
    ' Dies setzt voraus, dass ein Baugruppendokument aktiv ist.
    Dim oDoc As AssemblyDocument = ThisDoc.Document
'KraBBy: Set entfernt und auf 1 Zeile zusammengezogen

    ' Set a reference to the BOM___Setzen Sie einen Verweis auf die Stückliste
    Dim oBOM As BOM = oDoc.ComponentDefinition.BOM

'Dim FirstLevelOnly As Boolean
    'If MsgBox("First level only?", vbYesNo) = vbYes Then
    '    FirstLevelOnly = True
    ' Else
    '    FirstLevelOnly = False
    ' End If


    ' Make sure that the structured view is enabled___Stellen Sie sicher, dass die strukturierte Ansicht aktiviert ist.
    oBOM.StructuredViewEnabled = True

' Set a reference to the "Structured" BOMView___Setzen Sie einen Verweis auf die „Structured“ BOMView
    Dim oStructuredBOMView As BOMView
    oStructuredBOMView = oBOM.BOMViews.Item("Strukturiert")
'KraBBy: kann man auch 2zeilig stehen lassen; dann muss nur das "Set" weg

    Call oStructuredBOMView.Sort("Bauteilnummer")
    Call oStructuredBOMView.Renumber(1, 1)
'KraBBy: Call wäre nicht nötig, stört (mich) aber auch nicht

'KraBBy hinzu: "nur Bauteile" ggf. aktivieren
oBOM.PartsOnlyViewEnabled = True

' Set a reference to the "onlyParts" BOMView__Setzen Sie einen Verweis auf die BOMView "onlyParts".
    Dim oonlyPartsBOMView As BOMView
    oonlyPartsBOMView = oBOM.BOMViews.Item("nur Bauteile")

    Call oonlyPartsBOMView.Sort("Bauteilnummer")
    Call oonlyPartsBOMView.Renumber(1, 1 )

If bDebug Then MsgBox("Fertig" & vbCrLf & sFileName, vbOKOnly, "BOMsort")


Hat in meinem kleinen Test als externe Regel funktioniert.

Nach dem ausprobieren kannst Du die erste Codezeile ändern auf
Const bDebug As Boolean = False  ' statt True
Dann kommen keine MsgBoxen mehr.

------------------
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: 16. Mai. 2022 17: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 Kath878 10 Unities + Antwort hilfreich

Jetzt bin ich noch über einen Fehler gestolpert.
In einer leeren Bgr. (ohne Komponenten) schlägt die Regel fehl. Der Aufruf von ...BOMView.Renumber( klappt nicht.

------------------
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: 16. Mai. 2022 18: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 Kath878 10 Unities + Antwort hilfreich

jetzt schaut mein Vorschlag etwas anders aus
Code:
' für Assembly-Dokumente, BOM
' Strukturiert UND nurBauteile wird aktiviert
' je sortiert nach BauteilNr.
' neu nummeriert
'
' übertragen von VBA nach iLogic

Class ThisRule
Const bDebug As Boolean = True
'KraBBy: Schalter, um einige Meldungen in dieser Regel etc. Zentral ein/auszuschalten

Sub Main()

'KraBBy: Dateiname merken (wird für Meldungen benutzt)
Dim sFileName As String = ThisDoc.FileName(False)

'DokumentTyp prüfen
If Not TypeOf ThisDoc.Document Is AssemblyDocument Then
If bDebug Then MsgBox("falscher Doc-Type" & vbCrLf & sFileName, vbOKOnly, "BOMSort - Abbruch")
Exit Sub
End If
'ThisDoc.Document verwendet statt
'ThisApplication.ActiveDocument
' weil die Regel ggf. auch bei untergeordneten Bgr. ausgeführt wird/werden soll
' (ThisDoc liefert das Document, in dem die Regel gerade läuft)

  ' Set a reference to the assembly document.
    ' This assumes an assembly document is active__Setzen Sie einen Verweis auf das Baugruppendokument.
    ' Dies setzt voraus, dass ein Baugruppendokument aktiv ist.
    Dim oDoc As AssemblyDocument = ThisDoc.Document

    ' Set a reference to the BOM___Setzen Sie einen Verweis auf die Stückliste
    Dim oBOM As BOM = oDoc.ComponentDefinition.BOM

    ' Make sure that the structured view is enabled___Stellen Sie sicher, dass die strukturierte Ansicht aktiviert ist.
    oBOM.StructuredViewEnabled = True

' Set a reference to the "Structured" BOMView___Setzen Sie einen Verweis auf die „Structured“ BOMView
    Dim oStructuredBOMView As BOMView
    oStructuredBOMView = oBOM.BOMViews.Item("Strukturiert")

'KraBBy hinzu: "nur Bauteile" ggf. aktivieren
oBOM.PartsOnlyViewEnabled = True

' Set a reference to the "onlyParts" BOMView__Setzen Sie einen Verweis auf die BOMView "onlyParts".
    Dim oonlyPartsBOMView As BOMView
    oonlyPartsBOMView = oBOM.BOMViews.Item("nur Bauteile")

'Aufruf des Sub unten, für beide BOMView
Call BOMViewBearb(oStructuredBOMView, sFileName & vbCrLf & "BOM: Strukturiert") 'KraBBy: Call wäre nicht nötig, stört (mich) aber auch nicht
Call BOMViewBearb(oonlyPartsBOMView, sFileName & vbCrLf & "BOM: nur Bauteile")


If bDebug Then MsgBox("Fertig" & vbCrLf & sFileName, vbOKOnly, "BOMsort")

End Sub


Sub BOMViewBearb(oBomView As BOMView, sViewName As String)
'Code zum Sortieren und Nummerieren hier in ein Sub ausgelagert, um das nur einmal zu tippen
' sViewName wird für Fehlermeldung verwendet

Try
Call oBomView.Sort("Bauteilnummer")
    Call oBomView.Renumber(1, 1)

Catch ex As Exception
Dim sMsg As String = sViewName & vbCrLf & vbCrLf
sMsg += "Fehler beim Sortieren/Nummerieren der BOM:" & vbCrLf
sMsg += ex.Message
If bDebug Then MsgBox(sMsg, vbOKOnly, "BOMSort - Fehler")
End Try
End Sub

End Class


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

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

Kath878
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 31.08.2018

Inventor 2021, Vault 2021

erstellt am: 17. Mai. 2022 07:36    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

I am happy. Vielen Dank für Deine Bemühungen.

------------------
Gruß Kathrin

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