Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  VBasic / vb.net / vbs / wsh
  VBA Solidworks Makro Programmierung

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
  
3D-Druck: 7 Gründe für den Einsatz in der Medizin
Autor Thema:  VBA Solidworks Makro Programmierung (196 / mal gelesen)
Gentek
Mitglied


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

Beiträge: 2
Registriert: 18.03.2024

erstellt am: 18. Mrz. 2024 09: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


Screenshot2024-03-18091525.png

 
Hallo zusammen, ich habe ein Problem mit einem Makro das ich nicht gelöst bekomme. Vielleicht kann mir da ja wer helfen.
Ich möchte eine Baugruppe nach nach unterdrückten Bauteilen und Baugruppen durchsuchen und diese dann löschen.
Die Funktion von Solidworks mit alle unterdrücken Bauteile auswählen und dann von Hand löschen kann ich nicht verwenden, da in Unterbaugruppen unterdrückte Bauteile liegen können die aber da bleiben müssen.

Ich bekomme jedoch einen Fehler wenn ich die Extension von dem Modeldoc aufrufen möchte.

Der Fehler ist Laufzeitfehler '91':
Objektvariable oder With-Blockvariable nicht festgelegt


Option Explicit

Dim swApp As SldWorks.SldWorks
Sub main()

'Solidworksapplikation zuweisen
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks
   
'Aktive Solidworksmodel zuweisen
Dim swModel As SldWorks.ModelDoc2
Set swModel = swApp.ActiveDoc
   
'ModelDocExtension aus dem ModelDoc laden
Dim swModelExt As SldWorks.ModelDocExtension
Set swModelExt = swModel.Extension

          
'Prüfen ob ein aktives Solidworksmodel vorhanden ist
If swModel Is Nothing Then
    'Wenn kein aktives Model vorhanden ist dann Makro Ende
    swApp.SendMsgToUser "Kein Dokument geladen!"
    Exit Sub
End If

'Typ des aktiven Solidworksmodel zuweisen
Dim swDocType As Integer
swDocType = swModel.GetType

'Prüfen ob das Aktive Solidworksmodel ein Assambly ist
If swDocType <> swDocASSEMBLY Then
    'Wenn kein Assambly dann Makro Ende
    swApp.SendMsgToUser "Dieses Makro funktioniert nur in einem Assambly"
    Exit Sub
End If


'Baugruppe deklarieren und zuweisen aus Model
Dim swAssembly As AssemblyDoc
Set swAssembly = swModel

'Alle Bauteile aus Baugruppe auslesen
Dim allComponents As Variant
allComponents = swAssembly.GetComponents(True) 'true = toplevel / false = childcomponents

'Alle Bauteile aus Baugruppe zählen
Dim componentCount As Integer
componentCount = swAssembly.GetComponentCount(True) 'true = toplevel / false = childcomponents

'Abfrage ob die Bearbeitung fortgesetzt werden soll
Dim msgReturn As Integer
msgReturn = swApp.SendMsgToUser2("Anzahl zu bearbeitender Dateien: " & componentCount & vbCrLf & "Wollen Sie fortfahren?", swMbQuestion, swMbYesNo)

'Abfrage der MsgBox wenn nicht weiterbearbeitet werden soll dann beende das makro hier
If Not msgReturn = swMbHitYes Then
    Exit Sub
End If

    'anzahl zu behaltender Bauteile
    Dim intI As Integer
    intI = 0
   
    'anzahl zu löschender Bauteile
    Dim intJ As Integer
    intJ = 0
 

    'Variable für bauteile in Baugruppe deklarieren
    Dim component As Variant
    For Each component In allComponents
   
        'Variable für sld Components festgelegt und auslesen
        Dim swComponent2 As SldWorks.Component2
        Set swComponent2 = component
       
        'Unterdrückungsstatus auslesen
        Dim SuppressionState As Integer
        SuppressionState = swComponent2.GetSuppression2
   
        'variable für modeldoc der Componenten deklarierern und auslesen
        Dim swModelComponent As SldWorks.ModelDoc2
        Set swModelComponent = swComponent2.GetModelDoc2
   
'        'extension von modeldoc zuweisen
'        Dim swCustomE As SldWorks.ModelDocExtension
'        Set swCustomE = swModelComponent.Extension
       
        'Abfrage ob bauteil unterdrückt ist wenn ja dann nächste schleife starten
        If SuppressionState <> swComponentSuppressed Then
       
            'String für Bauteilname
            Dim swModelCompName As String
            swModelCompName = swComponent2.Name2
            Debug.Print swModelCompName
            intI = intI + 1
        Else
       
        'extension von modeldoc zuweisen
        Dim swCustomE As SldWorks.ModelDocExtension
        Set swCustomE = swModelComponent.Extension                      '!!!!!!!!!Hier tritt der Fehler auf!!!!!!!!!!!!!!

            Dim boolstatus As Boolean
            boolstatus = swCustomE.SelectByID2(swComponent2.Name2, "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
            swModel.EditDelete
            intJ = intJ + 1
            Debug.Print boolstatus
           
        End If
    Next
   
    Debug.Print intI
    Debug.Print intJ
   
End Sub

[Diese Nachricht wurde von Gentek am 18. Mrz. 2024 editiert.]

[Diese Nachricht wurde von Gentek am 18. Mrz. 2024 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2773
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2023
Plateia, Canalis
Visual Basic

erstellt am: 18. Mrz. 2024 11: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 Nur für Gentek 10 Unities + Antwort hilfreich

Hallo Gentek, willkommen im Forum 

Nachdem Deine Frage SolidWorks spezifisch ist, wäre es vielleicht sinnvoll diese im entsprechenden Forum zu stellen.
Das ActiveX Modell von Solidworks ist mir leider nicht bekannt.

Generell würde ich in so einem Fall im Überwachungsfenster überprüfen ob die Variable swModelComponent nicht nil ist (keine Zuweisung).

Grüße
Klaus 

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

HenryV
Mitglied
Konstrukteur, Engineering


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

Beiträge: 813
Registriert: 18.05.2005

SolidWorks 2022 x64 SP5.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 22H2
Microsoft 365 E5
Microsoft Visual Studio Enterprise 2022

erstellt am: 18. Mrz. 2024 15:34    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 Gentek 10 Unities + Antwort hilfreich

Hallo Gentek
Das Problem liegt daran, dass deine Komponente unterdrückt ist.
GetModelDoc2 Method (IComponent2)
Zitat:
Aus der SolidWorks-API-Hilfe:
This method might return Nothing or null if:
    - a component is suppressed or lightweight.
    - the component ID is not loaded into memory by SOLIDWORKS.

Gruss Andreas

------------------
21 ist nur die halbe Antwort.

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

Gentek
Mitglied


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

Beiträge: 2
Registriert: 18.03.2024

erstellt am: 18. Mrz. 2024 15:45    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

Also am besten nach der Abfrage ob es unterdrückt ist die Unterdrückung aufheben und dann mit dem Befehl löschen? Oder gibt es da noch einen eleganteren weg?

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

HenryV
Mitglied
Konstrukteur, Engineering


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

Beiträge: 813
Registriert: 18.05.2005

SolidWorks 2022 x64 SP5.0
Dell Precision 5820
Intel Xeon W-2125 4x4GHz
NVIDIA Quadro P2000 5GB
32GB RAM
2x Dell U2412M, 24" TFT
Windows 10 Enterprise x64 22H2
Microsoft 365 E5
Microsoft Visual Studio Enterprise 2022

erstellt am: 19. Mrz. 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 Gentek 10 Unities + Antwort hilfreich

Schau mal hier -> Komponente löschen mittels ?

Vielleicht funktioniert auch diese Methode:
Select all suppressed components in the assembly using SOLIDWORKS API

Oder von Hand -> Unterdrückte Bauteile aus Baugruppe löschen

------------------
21 ist nur die halbe Antwort.

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