Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro: Stückliste umbenennen/Schleife durch Features

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 SOLIDWORKS
  
E-Book: Simulation für Hightech Innovationen
Autor Thema:  Makro: Stückliste umbenennen/Schleife durch Features (3028 mal gelesen)
red5000
Mitglied



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

Beiträge: 47
Registriert: 23.08.2011

Solidworks 2012 x64
Windows 7
Xeon W3565
Quadro 4000
RAM 12 GB

erstellt am: 02. Mai. 2013 15:50    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 zur Zeit dabei ein Makro zu schreiben mit dem autom. zwei verschiedene Stücklisten eingefügt werden.
Ich weiß aber nicht wie ich die Stücklisten umbenennen kann.

Wenn es direkt beim einfügen nicht geht, könnte ich mit einer Schleife durch alle Features im Featuremanager nach den Stücklisten suchen und diese umbenennen.
Weiter unten im Code ist was ich aufgenommen habe, das Problem ist aber, dass die Stücklisten nicht unbedingt Stückliste1, 2 etc. heißen (zb. wenn man vorher welche eingefügt und dann gelöscht hat kann die Numerierung sonstwo anfangen).

Wie kann ich außerdem die Konfiguration der Zeichenansicht herauskriegen (siehe Makro), damit ich diese bei den Stücklisten verwenden kann?

Lösungs- sowie Verbesserungsvorschläge sind willkommen!
Benutze SWX 2012

gruß,
red

Code:

Option Explicit

Dim swApp As Object
Dim swModel As Object
Dim swView As Object
Dim boolstatus As Boolean
Dim anchorType As Long
Dim bomTypeMS As Long
Dim bomTypeTS As Long
Dim configuration As String
Dim templateMS As String
Dim templateTS As String
Dim swBomAnn As BomTableAnnotation
Dim swBomFeat As SldWorks.BomFeature

Sub main()

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc                              'Aktives Dokument

    If swModel Is Nothing Then                                  'Falls kein Dokument geöffnet ist
        MsgBox "Bitte eine Zeichnung öffnen.", _
        vbOKOnly + vbExclamation, "Keine Datei geöffnet"
        ClearObjects
        Exit Sub
    End If

    If swModel.GetType <> swDocDRAWING Then                    'Falls es keine Zeichnung ist
        MsgBox "Bitte eine Zeichnung öffnen.", _
        vbOKOnly + vbExclamation, "Keine Zeichnung"
        ClearObjects
        Exit Sub
    End If

'    Set swView = swModel.ActiveDrawingView                      'Aktive Zeichenansicht wählen
    swModel.ClearSelection2 True
    Set swView = swModel.GetCurrentSheet.GetViews()(0)          'Erste Zeichenansicht wählen (Konfiguration??)

    anchorType = swBOMConfigurationAnchor_BottomRight
    bomTypeMS = swBomType_Indented
    bomTypeTS = swBomType_PartsOnly
    configuration = "Standard"
    templateMS = "C:\Workspace\...\Tabellen\Stuecklisten\SW-Stueckliste\Montagestueckliste.sldbomtbt"
    templateTS = "C:\Workspace\...\Tabellen\Stuecklisten\SW-Stueckliste\Teilestueckliste.sldbomtbt"

    Set swBomAnn = swView.InsertBomTable2(False, -0.01, 0.5, anchorType, bomTypeMS, configuration, templateMS)  'Montagestückliste
   
'    Set swBomFeat = swBomAnn.BomFeature
'    MsgBox "Benutzte Konfiguration: " & swBomFeat.configuration

    Set swBomAnn = swView.InsertBomTable2(False, 1.85, 0.6, anchorType, bomTypeTS, configuration, templateTS)  'Teilestueckliste

    boolstatus = swModel.EditRebuild3()

'    'selektieren für umbenennen
'    boolstatus = swModel.Extension.SelectByID2("Stückliste1", "BOMFEATURE", 0, 0, 0, False, 0, Nothing, 0)
'
'    'umbenennen
'    boolstatus = swModel.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, "Montagestueckliste")

    ClearObjects

End Sub

Sub ClearObjects()

    Set swApp = Nothing
    Set swModel = Nothing
    Set swView = Nothing
    Set swBomAnn = Nothing
    Set swBomFeat = Nothing

End Sub


P.S. Grund für die zwei verschiedenen Stücklisten ist, dass ich gerne eine Kombination aus "nur Teile" und "mit Einzug" hätte.
D.h. Optimal wäre eine Stückliste mit Einzug in der die Anzahl der Teile *nicht* pro Baugruppe angegeben werden, sondern sozusagen mit der Anzahl der Baugruppe multipliziert werden. Gibt es dafür irgendwo eine Einstellungsmöglichkeit?

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 03. Mai. 2013 07: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 red5000 10 Unities + Antwort hilfreich

Hallo red,

mit diesen 2 Befehlen könntest du dich schonmal von der ersten bis zur letzten Tabelle durch hangeln
GetFirstTableAnnotation Method (IView)

Code:
value = instance.GetFirstTableAnnotation()

GetNext Method (ITableAnnotation)
Code:
value = instance.GetNext()

Und hiermiet bekommst du die verwendete Konfiguration zur Ansicht.
ReferencedConfiguration Property (IView)

Code:
value = instance.ReferencedConfiguration

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

red5000
Mitglied



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

Beiträge: 47
Registriert: 23.08.2011

Solidworks 2012 x64
Windows 7
Xeon W3565
Quadro 4000
RAM 12 GB

erstellt am: 03. Mai. 2013 08:49    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 und danke Bernd, das hilft schon mal weiter. In der SolidWorks API Help hab ich auch gleich ein super Beispiel-Makro gefunden, aber...
In diesem Programm wird an einer Stelle mit GetName auf den "Namen" der Tabelle zugegriffen:

Code:

    '...

Sub ProcessTable _
    (swApp As SldWorks.SldWorks, _
    swModel As SldWorks.ModelDoc2, _
    swTable As SldWorks.TableAnnotation)

    Dim swAnn                  As SldWorks.Annotation
    Dim nNumCol                As Long
    Dim nNumRow                As Long
    Dim sRowStr                As String
    Dim i                      As Long
    Dim j                      As Long

    Set swAnn = swTable.GetAnnotation
   
    nNumCol = swTable.ColumnCount
    nNumRow = swTable.RowCount

    ' Show the name and type of table
    Debug.Print "    " & swAnn.GetName & " <" & swTable.Type & ">"

    '....


Aber das ist nicht der Name wie er im Featuremanager steht. Dort heißt die Tabelle "Stückliste5" während das Makro "Detailelement445" (oder ähnlich) ausgibt. Weißt du wie ich den richtigen Namen rauskriegen oder besser ändern kann?

Gruß
red

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: 2776
Registriert: 18.07.2012

-Solid Works 2019 SP5
-Pro Engineer WF 3

erstellt am: 03. Mai. 2013 10:53    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 red5000 10 Unities + Antwort hilfreich

Hallo red,

mhh keine Ahnung aber evtl. mußt du dir das Feature dazu im Featurebaum holen und kannst es da umbenennen.
GetFeature Method (IBomFeature) und Name Property (IFeature).

Das ist jetzt keine wissen sondern nur raten  , vielleicht kommt ja noch einer der VBA-Profis vorbei.

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

red5000
Mitglied



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

Beiträge: 47
Registriert: 23.08.2011

Solidworks 2012 x64
Windows 7
Xeon W3565
Quadro 4000
RAM 12 GB

erstellt am: 04. Jun. 2013 12: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

Hallo nochmal, ist schon lange her aber musste mich zwischenzeitlich um andere Sachen kümmern. Bei meinem Stücklisten-umbenenn-Problem bin ich aber nicht viel weiter.

Einen Schritt habe ich aber gemacht:

Ich kriege zb. mit swBomFeat.GetFeature.Name den alten (zu ändernden) Namen der Stückliste raus (zb. Stückliste23, 24 usw.)

Ich kann auch die jeweiligen Stücklisten selektieren in dem ich den alten Namen benutze (mit swModel.Extension.SelectByID2) oder auch ohne den Namen zu wissen/herauszufinden (mit swBomFeat.GetFeature.Select2)

Was aber immer noch nicht geht ist umbenennen. Durch Makro aufzeichnen habe ich folgendes erhalten:
boolstatus = swModel.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, neunameTS)

aber es funktioniert nicht.. Es kommt auch keine Fehlermeldung oder sonstwas.

Ansonsten habe ich lange Zeit mit SetName Method (IAnnotation) rumprobiert ohne Erfolg.

Code:

Option Explicit

Dim boolstatus As Boolean
Dim anchorType As Long
Dim bomTypeMS As Long
Dim bomTypeTS As Long
Dim configuration As String
Dim templateMS As String
Dim templateTS As String
'Dim altnameMS As String
'Dim altnameTS As String
Dim neunameMS As String
Dim neunameTS As String
Dim swApp As SldWorks.SldWorks              'Solidworks
Dim swModel As SldWorks.ModelDoc2          'Dokument
Dim swView As Object                        'Zeichnungsansicht
Dim swBomAnnMS As BomTableAnnotation          'Stückliste
Dim swBomAnnTS As BomTableAnnotation          'Stückliste
Dim swBomFeat As SldWorks.BomFeature        'Stücklistenfeature
'Dim swTable As SldWorks.TableAnnotation
'Dim swAnn As SldWorks.Annotation
'Dim swSelMgr As SldWorks.SelectionMgr
'Dim swFeat As SldWorks.Feature

Sub BomInsert()

    Set swApp = Application.SldWorks                            'swApp = Solidworks
    Set swModel = swApp.ActiveDoc                              'swModel = aktives Dokument
   
    If swModel Is Nothing Then                                  'Falls kein Dokument geöffnet ist
        MsgBox "Bitte eine Zeichnung öffnen.", _
        vbOKOnly + vbExclamation, "Keine Datei geöffnet"
        ClearObjects
        Exit Sub
    End If
   
    If swModel.GetType <> swDocDRAWING Then                    'Falls es keine Zeichnung ist
        MsgBox "Bitte eine Zeichnung öffnen.", _
        vbOKOnly + vbExclamation, "Keine Zeichnung"
        ClearObjects
        Exit Sub
    End If

    If swModel.ActiveDrawingView Is Nothing Then                'Falls keine Zeichnungsansicht gewählt ist
        MsgBox "Bitte eine Zeichenansicht für die Stücklisten wählen", _
        vbOKOnly + vbExclamation, "Keine Zeichenansicht gewählt"
        ClearObjects
        Exit Sub
    End If
   
    Set swView = swModel.ActiveDrawingView                      'Aktive/gewählte Zeichenansicht wählen

    anchorType = swBOMConfigurationAnchor_BottomRight          'Anker für Stückliste (Unten rechts)
    bomTypeMS = swBomType_Indented                              'Mit Einzug für MS
    bomTypeTS = swBomType_PartsOnly                            'Nur Teile für TS
    configuration = swView.ReferencedConfiguration              'Selbe Konfiguration wie die gewählte Zeichnungsansicht wählen
    templateMS = "C:\Workspace\LMH\Systemdaten\Tabellen\Stuecklisten\SW-Stueckliste\Montagestueckliste.sldbomtbt"  'Vorlage für MS
    templateTS = "C:\Workspace\LMH\Systemdaten\Tabellen\Stuecklisten\SW-Stueckliste\Teilestueckliste.sldbomtbt"    'Vorlage für TS
    neunameMS = "Montagestueckliste"
    neunameTS = "Teilestueckliste"

    Set swBomAnnMS = swView.InsertBomTable2(False, -0.01, 0, anchorType, bomTypeMS, configuration, templateMS)  'Montagestückliste einfügen
    Set swBomAnnTS = swView.InsertBomTable2(False, 1.85, 0, anchorType, bomTypeTS, configuration, templateTS)  'Teilestueckliste einfügen
   
    boolstatus = swModel.EditRebuild3()                        'Neu aufbauen
   
'    Set swSelMgr = swModel.SelectionManager
'    Set swFeat = swSelMgr.GetSelectedObject6(1, -1)

'    boolstatus = swFeat.SetName("test")

    Set swBomFeat = swBomAnnMS.BomFeature                      'swBomFeat = Stücklistenfeature
    boolstatus = swBomFeat.GetFeature.Select2(False, 0)        'Stückliste selektieren
    boolstatus = swModel.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, neunameMS)                'rename

    Set swBomFeat = swBomAnnTS.BomFeature                      'swBomFeat = Stücklistenfeature
'    MsgBox swBomFeat.GetFeature.Name                      'alten Namen der Teilestueckliste speichern
    boolstatus = swBomFeat.GetFeature.Select2(False, 0)        'Stückliste selektieren
'    boolstatus = swModel.Extension.SelectByID2(altnameTS, "BOMFEATURE", 0, 0, 0, False, 0, Nothing, 0)  'select
    boolstatus = swModel.SelectedFeatureProperties(0, 0, 0, 0, 0, 0, 0, 1, 0, neunameTS)                'rename
   
    boolstatus = swModel.EditRebuild3()                        'Neu aufbauen

    ClearObjects

End Sub

Sub ClearObjects()                      'Objekte leeren

    Set swApp = Nothing
    Set swModel = Nothing
    Set swView = Nothing
    Set swBomAnnMS = Nothing
    Set swBomAnnTS = Nothing
    Set swBomFeat = Nothing

End Sub


Kann mir jemand weiterhelfen?

Viele Grüße
red

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

red5000
Mitglied



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

Beiträge: 47
Registriert: 23.08.2011

Solidworks 2012 x64
Windows 7
Xeon W3565
Quadro 4000
RAM 12 GB

erstellt am: 04. Jun. 2013 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

habs doch hingekriegt, dabei hab ich die Antwort schon seit Stunden... dachte ich hätte es schon versucht 

Im Makro ist es auskommentiert und benutze es um den alten Namen rauszukriegen (MsgBox swBomFeat.GetFeature.Name).
Andersherum kann ich den Namen natürlich einfach überschreiben:
swBomFeat.GetFeature.Name = "test".

Danke nochmal Bernd für die Hilfe.

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