Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Material zuweisen Intern und extern

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
Autor Thema:   Material zuweisen Intern und extern (1334 mal gelesen)
whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 21. Sep. 2016 14: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

Guten Tag!
Ich habe hunderte Baugruppen mit internen und externen gespeicherten Parts. Ich bin auf der suche nach einem Makro das nichts anderes macht, wie allen parts intern wie extern ein neues Material (DIN Baustahl 1.0037[S235JR]) zuweist.
Leider habe ich überhaupt nichts aktuelles gefunden. Die meisten Makros sind über 10 Jahre alt. oder so kompliziert das sie niemand versteht. Es muss auch nicht speichern oder einen ganzen Ordner öffnen. nur in der Vorhanden - geöffneten Baugruppe alle teile auf Baustahl umwandeln. wen ich dan die Baugruppe schliesse wird es automatisch gespeichert nehme ich an.

Vielen Dank für die Hilfe im voraus!


EDIT:
Da dieser Thread bereits sehr weit oben in der Google suche ist, stelle ich hier nochmal das Makro rein.
Es ändert alle Materialien in einer Baugruppe und Unterbaugruppe, egal ob intern oder extern abgespeicherte parts! Gegebenfals müssen pfad zur material DB und Materialart angepasst werden. Hier das Beispiel für Baustahl St37

Code:
Sub main()
Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swConf As SldWorks.Configuration
    Dim swRootComp As SldWorks.Component2
    Dim nStart As Long
    Dim bRet As Boolean

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
    nStart = Timer
    Debug.Print "File = " & swModel.GetPathName
    ' Traverse the assembly
    TraverseComponent swApp, swModel, swRootComp, 1
    Debug.Print ""
    Debug.Print "Time to traverse the assembly = " & Timer - nStart & " seconds"
    bRet = swModel.ForceRebuild3(False)
End Sub

Sub TraverseComponent(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim swCompModelDoc As SldWorks.ModelDoc2 '<-- neu
    Dim swPart As SldWorks.PartDoc '<-- neu
    Dim sPadStr As String
    Dim i As Long
    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        '# Ab hier neu
        Set swCompModelDoc = swChildComp.GetModelDoc2
        If swCompModelDoc.GetType = swDocPART Then
        Set swPart = swCompModelDoc
        swPart.SetMaterialPropertyName2 swChildComp.ReferencedConfiguration, "SolidWorks DIN Materials", "1.0037 (S235JR)"
        End If
        '# Bis hier neu
        Debug.Print sPadStr & "+" & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
        TraverseComponent swApp, swModel, swChildComp, nLevel + 1
    Next i
Set swApp = Application.SldWorks
End Sub


[Diese Nachricht wurde von whaaw am 07. Okt. 2016 editiert.]

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

Andi Beck
Ehrenmitglied V.I.P. h.c.
Konstrukteur



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

Beiträge: 2272
Registriert: 02.10.2006

Firma: SW 2019-5.0 + PDM Prof.
Windows 10 Pro 64bit, i7-2600K
3,4 GHz, 16 GbRAM, Quadro K2000
250GB SSD
Home:
SW 2018-5.0
SW 2019-5.0
SW 2020-1.0
Passungstabelle von Heinz
Windows 10 Home 64bit,
i7-860, 3,1 GHz, 16 GbRAM, GeForce GTX 1050Ti
Samsung SSD 860EVO, 500GB
Samsung C34H892, 3440 x 1440 Pixel

erstellt am: 21. Sep. 2016 18:31    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 whaaw 10 Unities + Antwort hilfreich

Hallo,
also, mir ist kein fertiges Makro bekannt, welches deine Anforderungen erfüllt.
Evtl. lässt sich das mit der JobBox von DPS lösen.
Ich weiß nicht, welchen Provider du hast.

Würde ich das Makro selber schreiben wollen, würde ich dieses Makro von mir als Vorlage verwenden und entsprechend anpassen.

http://ww3.cad.de/foren/ubb/Forum2/HTML/023775.shtml

Aber Programmierkentnisse sollte man schon ein wenig haben.

Grüße, Andi

------------------
Hast du kein Problem?
Such dir eins. ( Und löse es )

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 22. Sep. 2016 09: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

Danke für deine Antwort!

ein bischen was verstehe ich schon vom programmieren, ob dies für ein SW Makro reicht ist eine andere Frage.^^
da ich ja nur die materialen setzen will müsst eigentlich eine einfache forech schleife reichen oder?

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2354
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 22. Sep. 2016 09:42    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 whaaw 10 Unities + Antwort hilfreich

Hallo,

für solche Sachen wird in SWX i.d.R. die Komponenten Traversierung verwendet.

Code:
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swConf As SldWorks.Configuration
    Dim swRootComp As SldWorks.Component2
    Dim nStart As Long
    Dim bRet As Boolean

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
    nStart = Timer
    Debug.Print "File = " & swModel.GetPathName   
    ' Traverse the assembly
    TraverseComponent swApp, swModel, swRootComp, 1   
    Debug.Print ""
    Debug.Print "Time to traverse the assembly = " & Timer - nStart & " seconds"
   
End Sub

Sub TraverseComponent(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim swCompConfig As SldWorks.Configuration
    Dim sPadStr As String
    Dim i As Long
    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)

        'Hier dann das ModelDoc2 holen dieses zum PartDoc machen
        'Aktive Konfiguration holen und dann mit
        'PartDoc.SetMaterialPropertyName2 Konfigurationsname, Materialdatenbankname, Materialnamename
        'Material setzten

        Debug.Print sPadStr & "+" & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
        TraverseComponent swApp, swModel, swChildComp, nLevel + 1
    Next i
End Sub


Hier mal ein Beispiel für die Traverse inkl. Traverse durch die Unterbaugruppen aus der API Hilfe kopiert.

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete  

[Diese Nachricht wurde von bk.sc am 22. Sep. 2016 editiert.]

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 22. Sep. 2016 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

wow, das ist ja mal richtig aufwendig, bis ich da einen guten Code zusammen habe der mir nicht gleich die ganze SW Installation weglöscht, werde ich das wohl oder übel per Hand machen müssen.

Da ich den Support Vertrag von Solidworks habe, glaubt ihr die würden mir sowas programmieren?
immerhin 3000.- im Jahr die ich bis jezt noch nie gebruacht habe ^^.

vielen dank!

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

KMassler
Ehrenmitglied V.I.P. h.c.
CAD Admin + Mädchen für Alles...



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

Beiträge: 2631
Registriert: 06.11.2000

erstellt am: 22. Sep. 2016 10: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 whaaw 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von whaaw:
wow, das ist ja mal richtig aufwendig, bis ich da einen guten Code zusammen habe der mir nicht gleich die ganze SW Installation weglöscht, werde ich das wohl oder übel per Hand machen müssen.
...


DAS ist aufwändig? :D :D
Wenn du das aufwändig findest, dann rate ich dir: Lass es!


Zitat:
Original erstellt von whaaw:
... Da ich den Support Vertrag von Solidworks habe, glaubt ihr die würden mir sowas programmieren?
immerhin 3000.- im Jahr die ich bis jezt noch nie gebruacht habe ^^.
vielen dank!

Die programmieren dir das gerne, aber nicht im Rahmen des Support Vertrages.
Das geht extra. Und was so ein Tag Dienstleistung kostet, weißt du ja vermutlich.

------------------
Klaus

www.al-ko.com | mein Gästebuch

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 22. Sep. 2016 10:48    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

ja kann ich mir vorstellen was das kostet, ja das ist definitiv aufwendig wen man bedenkt das ich nur eine einzige "value" pro part ändern will. Mann müsste meinen das dies einfacher gehn muss wie eine ganze seite Code.

$Parts = Active.parts
forech part in parts
{
  part.config.material = CrNi
}

so etwas würde ich als einfach bezeichnen. Aber wie Sie schon geschrieben haben werde ich es einfach lassen. Schon traurig das man bei einem 15.000.- Programm nicht mal "Bulk" aufgaben setzen kann für solche Sachen. Auch wenn man mit VB und Makros alle Möglichkeiten hat, ist das überhaupt nicht benutzerfreundlich. (sry bin gerade ein bischen angepisst)

Trozdem Danke euch allen für eure Hilfe und Zeit!
mfg Marco

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 22. Sep. 2016 10:55    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

ja kann ich mir vorstellen was das kostet, ja das ist definitiv aufwendig wen man bedenkt das ich nur eine einzige "value" pro part ändern will. Mann müsste meinen das dies einfacher gehn muss wie eine ganze seite Code.

$Parts = Active.parts
forech part in parts
{
  part.config.material = CrNi
}

so etwas würde ich als einfach bezeichnen. Aber wie Sie schon geschrieben haben werde ich es einfach lassen. Schon traurig das man bei einem 15.000.- Programm nicht mal "Bulk" aufgaben setzen kann für solche Sachen. Auch wenn man mit VB und Makros alle Möglichkeiten hat, ist das überhaupt nicht benutzerfreundlich. (sry bin gerade ein bischen angepisst)

Trozdem Danke euch allen für eure Hilfe und Zeit!
mfg Marco

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 22. Sep. 2016 12: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 Nur für whaaw 10 Unities + Antwort hilfreich

Hallo whaaw,

ich verstehe ja, dass du dir das vielleicht anders vorstellst, aber was ist denn an dem Code, den dir Bernd gepostet hat, so schwierig?

Zitat:
Original erstellt von whaaw:
wow, das ist ja mal richtig aufwendig, bis ich da einen guten Code zusammen habe der mir nicht gleich die ganze SW Installation weglöscht, werde ich das wohl oder übel per Hand machen müssen.


Der Code macht genau das, was du gerne hättest, er hat nur sicherheitshalber die Zeile, die wirklich die Materialzuweisung macht auskommentiert und erklärt, was du tun musst, eben um genau den Effekt zu vermeiden, dass sich irgendjemand irgendwas aus dem Internet kopiert und dann wundert, warum seine Platte geputzt wurde.

Aufwendig ist das aber nun ganz und gar nicht, und VBA ist eben die Standardprogrammiersprache, die seit über 20 Jahren nicht nur bei SolidWorks, sondern in allen möglichen Programmen wie z.B. auch dem weit verbreiteten Office, benutzt wird.

Zitat:
Original erstellt von whaaw:
Da ich den Support Vertrag von Solidworks habe, glaubt ihr die würden mir sowas programmieren?
immerhin 3000.- im Jahr die ich bis jezt noch nie gebruacht habe ^^.

Hm, wenn du einen guten Draht zu denen hast und vielleicht nicht gerade mit dieser Art Argimentation kommst (oder das von deinem Supportvertrag abgedeckt wird) kriegst du das Makro vielleicht für kleines oder gar für lau. Der Code, der oben von Bernd gepostet steht, muss "nur" um ein paar Zeilen erweitert werden, das sollte für einen halbwegs erfahrenen SolidWorks-Makroprogrammierer in dieser einfachen Variante in 30 Minuten erledigt sein.

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2354
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

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

Hallo whaaw,

hab mal den Code ergänzt, aber wie Stefan schon schrieb kann ich nur sagen das dieser bei mir Funktioniert, der Code ist bis auf die 2 Dim Anweisungen und 5 Zeilen Code aus der SWX Hilfe kopiert, sprich der Aufwand tendiert gegen 0 (Kopieren + Erweitern + Beitrag hier im Brett = ca. 10 min.). In diesem Code werden halt einige Umstände berücksichtigt wie:
-Early Binding (Option Explicit)
-Welche Konfiguration der Baugruppe ist aktiv
-Gibt es evtl. Unterbaugruppen die auch durchgegangen werden wollen
-Hat die Komponenten mehrere Konfigurationen
-Debug.Prints fürs bessere nachverfolgen beim debuggen

Wenn deine Baugruppen nur eine Ebene haben (keine UBG) und deine Komponenten auch keine Konfigurationen besitzten und du auf late Binding gehst könntest du den Code natürlich smaller gestallten aber er wäre halt nicht mehr so sprechend.

Code:

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swConf As SldWorks.Configuration
    Dim swRootComp As SldWorks.Component2
    Dim nStart As Long
    Dim bRet As Boolean

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swConf = swModel.GetActiveConfiguration
    Set swRootComp = swConf.GetRootComponent3(True)
    nStart = Timer
    Debug.Print "File = " & swModel.GetPathName
    ' Traverse the assembly
    TraverseComponent swApp, swModel, swRootComp, 1
    Debug.Print ""
    Debug.Print "Time to traverse the assembly = " & Timer - nStart & " seconds"
   
End Sub

Sub TraverseComponent(swApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swComp As SldWorks.Component2, nLevel As Long)
    Dim vChildComp As Variant
    Dim swChildComp As SldWorks.Component2
    Dim swCompModelDoc As SldWorks.ModelDoc2 '<-- neu
    Dim swPart As SldWorks.PartDoc '<-- neu
    Dim sPadStr As String
    Dim i As Long
    For i = 0 To nLevel - 1
        sPadStr = sPadStr + "  "
    Next i
    vChildComp = swComp.GetChildren
    For i = 0 To UBound(vChildComp)
        Set swChildComp = vChildComp(i)
        '# Ab hier neu
        Set swCompModelDoc = swChildComp.GetModelDoc2
        If swCompModelDoc.GetType = swDocPART Then
        Set swPart = swCompModelDoc
        swPart.SetMaterialPropertyName2 swChildComp.ReferencedConfiguration, "_SolidWorks DIN Materials", "1.0037 (S235JR)"
        End If
        '# Bis hier neu
        Debug.Print sPadStr & "+" & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">"
        TraverseComponent swApp, swModel, swChildComp, nLevel + 1
    Next i
End Sub


Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 06. Okt. 2016 15: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

Danke für all die Antworten!, Ich hab nun ein bischen Zeit mir das genauer anzusehen. Das Problem war, ich kann nicht einfach eine Seite Code über meine parts laufen lassen ohne das ich genau weiss was dieses makro macht.

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 06. Okt. 2016 16:01    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

Die manespaces musste ich alle ändern zu
Code:
  Dim swApp As SolidWorks.Interop.sldworks.SldWorks
        Dim swModel As SolidWorks.Interop.sldworks.ModelDoc2
        Dim swConf As SolidWorks.Interop.sldworks.Configuration
        Dim swRootComp As SolidWorks.Interop.sldworks.Component2
        Dim nStart As Long
        Dim bRet As Boolean

habe nun trozdem noch fehlermeldungen im Editor und zwar:

Code:
Error 2 Name 'swDocPART' is not declared
      Error 1 Name 'Application' is not declared.

leider keinen erfolg diese fehler zu beheben

Bernd's Code sieht nun so aus:

Code:
Imports SolidWorks.Interop.sldworks
Imports SolidWorks.Interop.swconst
Imports System.Runtime.InteropServices
Imports System.Diagnostics
Imports SolidWorks

Partial Class SolidWorksMacro

    Public Sub main()

        Dim swApp As SolidWorks.Interop.sldworks.SldWorks
        Dim swModel As SolidWorks.Interop.sldworks.ModelDoc2
        Dim swConf As SolidWorks.Interop.sldworks.Configuration
        Dim swRootComp As SolidWorks.Interop.sldworks.Component2
        Dim nStart As Long
        Dim bRet As Boolean

        swApp = Application.SldWorks
        swModel = swApp.ActiveDoc
        swConf = swModel.GetActiveConfiguration
        swRootComp = swConf.GetRootComponent3(True)
        nStart = Timer
        Debug.Print("File = " & swModel.GetPathName)
        ' Traverse the assembly
        TraverseComponent(swApp, swModel, swRootComp, 1)
        Debug.Print("")
        Debug.Print("Time to traverse the assembly = " & Timer - nStart & " seconds")

    End Sub

    Sub TraverseComponent(ByVal swApp As SolidWorks.Interop.sldworks.SldWorks, ByVal swModel As SolidWorks.Interop.sldworks.ModelDoc2, ByVal swComp As SolidWorks.Interop.sldworks.Component2, ByVal nLevel As Long)
        Dim vChildComp As Object
        Dim swChildComp As SolidWorks.Interop.sldworks.Component2
        Dim swCompModelDoc As SolidWorks.Interop.sldworks.ModelDoc2 '<-- neu
        Dim swPart As SolidWorks.Interop.sldworks.PartDoc '<-- neu
        Dim sPadStr As String
        Dim i As Long
        For i = 0 To nLevel - 1
            sPadStr = sPadStr + "  "
        Next i
        vChildComp = swComp.GetChildren
        For i = 0 To UBound(vChildComp)
            swChildComp = vChildComp(i)
            '# Ab hier neu
            swCompModelDoc = swChildComp.GetModelDoc2
            If swCompModelDoc.GetType = swDocPART Then
                swPart = swCompModelDoc
                swPart.SetMaterialPropertyName2(swChildComp.ReferencedConfiguration, "_SolidWorks DIN Materials", "1.0037 (S235JR)")
            End If
            '# Bis hier neu
            Debug.Print(sPadStr & "+" & swChildComp.Name2 & " <" & swChildComp.ReferencedConfiguration & ">")
            TraverseComponent(swApp, swModel, swChildComp, nLevel + 1)
        Next i
    End Sub
    Public swApp As SldWorks


End Class


[Diese Nachricht wurde von whaaw am 06. Okt. 2016 editiert.]

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2354
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 06. Okt. 2016 16:05    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 whaaw 10 Unities + Antwort hilfreich

Hallo,

du kannst ja wie die meisten das ganze wohl machen, einfach mal das Makro Schrittweise durchlaufen lassen (im Macroeditor mit F8) und schauen was da Schritt für Schritt passiert. Mache ich ja auch nicht anders wenn ich Makros aufbaue oder mir Schnippsel irgendwo her kopiere. Macros tue ich immer erst mit Beispieldaten testen evtl. sogar mit beabsichtigten Fehlern in den Daten um z.B. Sonderfälle auch zu testen.

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2354
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 06. Okt. 2016 16: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 whaaw 10 Unities + Antwort hilfreich

Hallo nochmal,

arbeitest du in VB oder in VBA? Weil das sieht mir eher ein bisschen nach VB aus.
Wenn VBA hast du evtl. die Verweise auf deine SWX Version umgebogen?

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete 

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 06. Okt. 2016 16:19    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

Ja guter Einwand! da bin ich wohl im falschen Project drinnen gewesen XD,
Hab nun deinen Code in eine SWP makro Kopiert, läuft nun auch durch ohne Fehlermeldung alles, nur die Materialien werden irgendwie nicht gesetzt.


EDIT: HABE ES GESCHAFFT 

geändert habe ich

Code:
swPart.SetMaterialPropertyName2(swChildComp.ReferencedConfiguration, "_SolidWorks DIN Materials", "1.0037 (S235JR)")

in
Code:
swPart.SetMaterialPropertyName2 swChildComp.ReferencedConfiguration, "C:/Program Files/SOLIDWORKS Corp/SOLIDWORKS/lang/german/sldmaterials/SolidWorks DIN Materials.sldmat", "1.0037 (S235JR)"

Gibt es noch eine möglichkeit einen neuaufbau (ctrl+Q) im makro mit einzubauen?

[Diese Nachricht wurde von whaaw am 06. Okt. 2016 editiert.]

[Diese Nachricht wurde von whaaw am 06. Okt. 2016 editiert.]

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

bk.sc
Ehrenmitglied V.I.P. h.c.
Konstrukteur Sondermaschinenbau



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

Beiträge: 2354
Registriert: 18.07.2012

-Solid Works 2019 SP3
-Pro Engineer WF 3

erstellt am: 07. Okt. 2016 07: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 Nur für whaaw 10 Unities + Antwort hilfreich

Hallo,

das mit der umbenannten Datenbank war mein Fehler, bei dir hätte eigendlich das entfernen des "_" reichen müssen, aber mit dem Kompletten Pfad geht es natürlich auch.

Neuaufbau wäre diese Zeile am Ende rein.

Code:
bRet= swModel.ForceRebuild3(False)

Gruß
Bernd

------------------
--- Man muß nicht alles wissen, man muß nur wissen wo es steht ---

Staatlich anerkannte Deutschniete  

[Diese Nachricht wurde von bk.sc am 07. Okt. 2016 editiert.]

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

whaaw
Mitglied
Konstrukteur


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

Beiträge: 12
Registriert: 17.12.2014

SW2015

erstellt am: 07. Okt. 2016 09:48    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

Vielen Dank für die Hilfe Bernd, wünsche euch einen schönen Tag!

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