Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  Makro -abgeleitete Zeichnungen mit Eltern Verknüpfen

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:   Makro -abgeleitete Zeichnungen mit Eltern Verknüpfen (1010 mal gelesen)
remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 18. Sep. 2017 15:33    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 liebe Gemeinde,

ich finde das Forum hier ist super um sich neue Anregungen für diverse Makros zu holen. Jedoch befinde ich mich nun auf Kriegsfuß mit SW und den Makros.

Zu meinem Problem, da man immer vom 1/100tel ins 1/1000tel kommt und hier und dort noch Verbesserungsideen bekommt möchte ich ein Makro schreiben, dass in einer Zeichnung:

a) Die Referenzkonfigurationen von den abgeleiteten Ansichten auf "mit Eltern verknüpfen" stellt - in allen Blättern

b) sämtliche Blätter durchgeht und alle Ansichten wie die "Eltern Ansicht" aussieht.

und c) die Namen der einzelnen Blätter geändert werden - in fortlaufende Nummer, Name der Ansicht und Blatt format.

Ich habe mit dem "einfachen Teil" angefangen und den Punkt c) dank dem Makro Mania lösen können.

zu b) Ebenso habe ich über "DisplayMode3" in groben Zügen versucht die Ansichten auf "verdeckte Kanten ausblenden" umzustellen.
Dabei erhielt ich das erste Problem: Nur wenn ich bei allen Ansichten (auf den unterschiedlichen Blättern) die Anzeige "Schattiert" auswähle erhalte ich das Ergebnis was ich haben möchte (in Allen Ansichten sind die Kanten ausgeblendet), aber wenn ich bsp. "Schattiert mit Kanten" oder "verdeckte Kanten sichtbar" auswähle ignoriert es das Makro vollständig...

und zu a) bin ich wirklich ratlos     

in meiner Not wende ich mich an euch und bitte um Hilfe - oder zu mindest um Hilfe zur Selbsthilfe.

zu meinem System: Solidworks Prof. 2017SP3 x64 auf Win 7

Bitte um Hilfe - anbei die Schribsel die ich mit ach und krach auf die Reihe bekommen habe

Vielen Dank im Vorraus

remtc

Code:
Option Explicit

Dim swApp As Object
Dim DrawingDoc As Object
Dim Sheet As Object
Dim Viewname As String
Dim View As Object
Dim ConfigName As String
Dim ConfigName1 As String
Dim Size As String
Dim i As Long
Dim AnzahlBl As Long
Dim SheetNames As Variant
Dim SheetProp As Variant
Dim vTemplateSizes As Variant
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swDrawing As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim fileName As String
Dim errors As Long
Dim warnings As Long
Dim status As Boolean

Sub main()


' **********************************************************************
' * Makro benennt alle Blätter einer Zeichnung um, dazu wird der
' * Konfigurationsname des Modells in der Zeichenansicht genutzt, die
' * auch für die benutzerdefinierten Eigenschaften in den
' * Blatteigenschaften eingestellt ist
' *
' * 22.05.2007 Stefan Berlitz (stefan.berlitz@solidworks.cad.de)
' * http://solidworks.cad.de
' * http://swtools.cad.de
' *
' **********************************************************************


' Konstante aus swconst.bas
Const swDocDRAWING = 3

'*Sub main()

Set swApp = CreateObject("SldWorks.Application")

    ' an SolidWorks anhängen
    Set swApp = CreateObject("SldWorks.Application")

    ' prüfen, ob überhaupt ein Dokument offen ist ...
    Set DrawingDoc = swApp.ActiveDoc
    If DrawingDoc Is Nothing Then
        MsgBox "Kein Dokument offen"
        Exit Sub
    End If
    ' ... und ob das auch eine Zeichnung ist
    If (DrawingDoc.GetType <> swDocDRAWING) Then
        MsgBox "Nur für Zeichnungen sinnvoll"
        Exit Sub
    End If

    ' einen Loop über alle Blätter, dazu die Anzahl der Blätter holen,
    ' und dann in der Schleife eines nach dem anderen abklappern
    AnzahlBl = DrawingDoc.GetSheetCount
    SheetNames = DrawingDoc.GetSheetNames

    For i = 0 To AnzahlBl - 1
        ' das nächste Blatt aktivieren
        If DrawingDoc.ActivateSheet(SheetNames(i)) Then
            ' aktuelles Blatt holen
            Set Sheet = DrawingDoc.GetCurrentSheet
           
            Set View = DrawingDoc.GetFirstView

        ' solange es noch eine Ansicht gibt
            While Not View Is Nothing
            ' überprüfen, ob der View überhaupt facettiert (= Entwurfsmodus) ist
            '
                  If View.GetFacettedHlrDisplay = True Then
                    ' dann den aktuelle Anzeigeart holen
                        DisplayMode = View.GetDisplayMode
                    ' und überprüfen, ob die Kanten bei schattierter Ansicht dargestellt werden
                        displayEdgesInShadedMode = View.GetDisplayEdgesInShadedMode
                '
                ' die Ansicht auf hohe Qualität setzen

                    '*    displayUseParentDisplayMode = View.GetUseParentDisplayMode
                   
                        Set DisplayMode = 2 ' swSHADED_EDGES
                        displayEdgesInShadedMode = True
                        View.SetDisplayMode3 displayUseParentDisplayMode, DisplayMode, False, displayEdgesInShadedMode
                   
                    Set swModel = swApp.OpenDoc6(fileName, swDocDRAWING, swOpenDocOptions_Silent, "", errors, warnings)
                    Set swDrawing = swModel
                    Set swModelDocExt = swModel.Extension
                   
                    ' Make the projected view the active view
                        status = swDrawing.ActivateView("Drawing View2")
                        status = swModelDocExt.SelectByID2("Drawing View2", "DRAWINGVIEW", 0.4426278247583, 0.3837831481976, 0, False, 0, Nothing, 0)
                        Set swView = swDrawing.ActiveDrawingView

                        ' Determine whether the projected view is linked to the
                        ' parent configuration
                        Call LinkConfiguration

                        ' Link the projected view to the parent
                        ' configuration
                        swView.LinkParentConfiguration = True

                        ' Determine whether the projected view is linked to the
                        ' parent configuration
                        Call LinkConfiguration
                   
                  '*End If
                ' ... und die nächste Ansicht
                Set View = View.GetNextView
            Wend
       
            SheetProp = Sheet.GetProperties
                Size = ""
                    If SheetProp(0) = 7 Then Size = "A4"
                    If SheetProp(0) = 8 Then Size = "A3"
                    If SheetProp(0) = 9 Then Size = "A2"
                    If SheetProp(0) = 10 Then Size = "A1"
                    If SheetProp(0) = 11 Then Size = "A0"
            ' Namen zurücksetzen
            ConfigName = "???"

            ' den Viewnamen aus den Blatteigenschaften auslesen
            Viewname = Sheet.CustomPropertyView
            ' dann den passenden View suchen,d er erste View ist immer das Blatt selbst
            Set View = DrawingDoc.GetFirstView
            ' wenn der Viewname "Standard" ist wird der erste View genommen
            If Viewname = "Standard" Then
                ' also die Konfig aus dem Modell des ersten Views holen
                Set View = View.GetNextView
                ConfigName = View.ReferencedConfiguration
           
            Else
                ' ansonsten die View suchen, deren Namen angegeben ist
                While Not View Is Nothing
                    If View.GetName2 = Viewname Then
                        ConfigName = View.ReferencedConfiguration
                    End If
                    Set View = View.GetNextView
                Wend
            End If
           
            '*Name mit Blattnummer und Groesse
            ConfigName1 = Format(i + 1, "00") & "/" & ConfigName & "/" & Size

            ' So, jetzt haben wir den Namen der Konfiguration, die jetzt in
            ' den Blattnamen eintragen
            ' eigentlich müsste hier noch geprüft werden, ob es schon ein Blatt
            ' mit diesem Namen gibt, denn sonst klappt das Umbenennen nicht
            Sheet.SetName (ConfigName1)

        End If
    Next i

End Sub

Private Sub LinkConfiguration()
' Print to the Immediate window whether
' the projected view is linked to the parent
' configuration
    status = swView.LinkParentConfiguration
    If status Then
        Debug.Print "Projected view now linked to parent configuration."
        swModel.EditRebuild3
    Else
        Debug.Print "Projected view not linked to parent configuration."
    End If
End Sub


[Diese Nachricht wurde von remtc am 19. Sep. 2017 editiert.]

[Diese Nachricht wurde von remtc am 19. Sep. 2017 editiert.]

[Diese Nachricht wurde von remtc am 19. Sep. 2017 editiert.]

[Diese Nachricht wurde von remtc am 19. Sep. 2017 editiert.]

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

CAD-Maler
Mitglied
Konstrukteur / CAD-Admin / Mädchen für alles


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

Beiträge: 529
Registriert: 17.01.2007

SWX 2015 SP5
AutoCAD 2015
Win 8.1 64 bit
Intel Xeon 3,2GHz
16GB RAM
Nvidia Quadro K2200
SWx EPDM

erstellt am: 18. Sep. 2017 15:52    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 remtc 10 Unities + Antwort hilfreich

Das ist einer der besten, wenn nicht gar der beste erste Post im WBF, den ich seit langem gesehen hab. Dafür gibt es direkt mal 10 Üs... 


Trotzdem kann ich dir leider mangels Erfahrung mit Zeichnungs-Makros nicht helfen. 

Gruß, Jens

------------------
CSWA, CSWP, CSWPA-SM & -SU =)

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: 2607
Registriert: 06.11.2000

** CSWP 01/2008 **
HP Z440, 16GB, Quadro K2200;
SWX2016 SP4;
SAP/PLM;
DriveWorks Pro;
Programmierung: VBA, Relikte mit VB6, aktuell VB.NET 2015

erstellt am: 18. Sep. 2017 16:41    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 remtc 10 Unities + Antwort hilfreich

Hi,

Code-mäßig kann ich mich damit gerade aus Zeitgründen nicht beschäftigen.
Mir ist nur zu deiner letzten Bemerkung im Code was eingefallen:

Code:
            '*Name mit Blattnummer und Groesse
            ConfigName1 = Format(i + 1, "00") & "/" & ConfigName & "/" & Size
            ' So, jetzt haben wir den Namen der Konfiguration, die jetzt in
            ' den Blattnamen eintragen
            ' eigentlich müsste hier noch geprüft werden, ob es schon ein Blatt
            ' mit diesem Namen gibt, denn sonst klappt das Umbenennen nicht
            Sheet.SetName (ConfigName1)

Entweder deine neue Blattbenennung ist maßgeblich- dann hieße das ja, dass ein schon vorhandenes Blatt mit einem solchen Namen falsch benannt wäre und so nicht stehen bleiben darf.
Um das zu verhindern würde ich erst mal am Anfang allen Blättern einen Dummy-Namen geben (z.B. "~temp01..~temp99" oder so) und dann erst die richtige Benennung vornehmen.

Oder es können gleiche Blattnamen entstehen- aber das hast du ja eigentlich schon verhindert, indem du den Zähler i als Prefix vor den Blattnamen gesetzt hast.

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

http://www.alko-tech.com | mein Gästebuch

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

jörg.jwd
Ehrenmitglied V.I.P. h.c.
CAD-PDM Administrator


Sehen Sie sich das Profil von jörg.jwd an!   Senden Sie eine Private Message an jörg.jwd  Schreiben Sie einen Gästebucheintrag für jörg.jwd

Beiträge: 2747
Registriert: 05.11.2003

Win XP, Win7-64,
SWX 2010/11/12/13/14/15/16/17/18,
Immer das aktuellste SP
Autodesk Product Design Suite Standard 2013/14/16
DraftSight Énterprise 2017SP2
CIM Database auf Dell Precision M4800 16GB RAM. NVIDIA Quadro K2100M

erstellt am: 19. Sep. 2017 07: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 Nur für remtc 10 Unities + Antwort hilfreich

...OT

wäre es nicht möglich so einen Code als Anhang zu posten? Dann wäre das Ganze etwas übersichtlicher und man müsste nicht ständig kilometerweit scollen.

------------------
Grüße

Jörg

man hat nie Zeit es richtig zu machen, aber immer genug Zeit es nochmals zu machen

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 19. Sep. 2017 07: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


Blattumbenennen.swp.txt

 
Hallo,

@Jörg - natürlich ist es auch möglich die Datei hochzuladen - anbei ist Sie. Eine Änderung zum vorherigen Code: ich habe versucht den DisplayMode mit Set. zu setzen.

@Jens - Vielen Dank ich geb mir Mühe   

@Klaus - eben durch die fortlaufende Nummerierung ist eine Doppelbennenung unmöglich

[Diese Nachricht wurde von remtc am 19. Sep. 2017 editiert.]

[Diese Nachricht wurde von remtc am 19. Sep. 2017 editiert.]

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

jörg.jwd
Ehrenmitglied V.I.P. h.c.
CAD-PDM Administrator


Sehen Sie sich das Profil von jörg.jwd an!   Senden Sie eine Private Message an jörg.jwd  Schreiben Sie einen Gästebucheintrag für jörg.jwd

Beiträge: 2747
Registriert: 05.11.2003

Win XP, Win7-64,
SWX 2010/11/12/13/14/15/16/17/18,
Immer das aktuellste SP
Autodesk Product Design Suite Standard 2013/14/16
DraftSight Énterprise 2017SP2
CIM Database auf Dell Precision M4800 16GB RAM. NVIDIA Quadro K2100M

erstellt am: 19. Sep. 2017 07: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 remtc 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von remtc:
Hallo,
@Jörg - natürlich ist es auch möglich die Datei hochzuladen - anbei ist Sie.

...hier braucht niemand mehr diese Datei. Das war für die Zukunft gedacht. Du bist nicht der Einzige der kilometerlange Codes im Text postet    also künftig daran denken   

------------------
Grüße

Jörg

man hat nie Zeit es richtig zu machen, aber immer genug Zeit es nochmals zu machen

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: 8702
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: 19. Sep. 2017 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 Nur für remtc 10 Unities + Antwort hilfreich

Hallo remtc,

und herzlich willkommen im SolidWorks-Brett auf CAD.de 

Zu deinem Punkt a: du hast im Makro ja schon den Loop über alle Blätter und darauf auch den Loop über alle Zeichenansichten. Dann kannst du bei den passenden Views mit View::LinkParentConfiguration die Konfiguration mit der Elternansicht verknüpfen. Dazu gibt es auch ein Beispiel in der API Hilfe ("Link Projected View to Parent Configuration (VBA)")

Ciao,
Stefan

PS @Jörg: ist schon interessant, ich finde es viel besser, wenn ich den kilometerlangen Code direkt im Beitrag lesen kann, ich lade mir solche Anhänge nämlich nicht runter , um Sie mir dann auf meinem Handy oder Tablet oder auch am PC im Notepad anzuschauen. Vorher konnte ich schnell alles direkt im Browser lesen, jetzt würde ich den Post ignorieren. Aber so ist das eben, man kann es nicht allen Recht machen 


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

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

jörg.jwd
Ehrenmitglied V.I.P. h.c.
CAD-PDM Administrator


Sehen Sie sich das Profil von jörg.jwd an!   Senden Sie eine Private Message an jörg.jwd  Schreiben Sie einen Gästebucheintrag für jörg.jwd

Beiträge: 2747
Registriert: 05.11.2003

Win XP, Win7-64,
SWX 2010/11/12/13/14/15/16/17/18,
Immer das aktuellste SP
Autodesk Product Design Suite Standard 2013/14/16
DraftSight Énterprise 2017SP2
CIM Database auf Dell Precision M4800 16GB RAM. NVIDIA Quadro K2100M

erstellt am: 19. Sep. 2017 09: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 remtc 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von StefanBerlitz:

PS @Jörg: ist schon interessant, ich finde es [b]viel besser, wenn ich den kilometerlangen Code direkt im Beitrag lesen kann, ich lade mir solche Anhänge nämlich nicht runter , um Sie mir dann auf meinem Handy oder Tablet oder auch am PC im Notepad anzuschauen. Vorher konnte ich schnell alles direkt im Browser lesen, jetzt würde ich den Post ignorieren. Aber so ist das eben, man kann es nicht allen Recht machen   


Hallo Stefan,

bitte nicht missverstehen. Das war nur ein Vorschlag. Meinetwegen kann der Post sein so lange er will.     

------------------
Grüße

Jörg

man hat nie Zeit es richtig zu machen, aber immer genug Zeit es nochmals zu machen

[Diese Nachricht wurde von jörg.jwd am 19. Sep. 2017 editiert.]

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: 2607
Registriert: 06.11.2000

** CSWP 01/2008 **
HP Z440, 16GB, Quadro K2200;
SWX2016 SP4;
SAP/PLM;
DriveWorks Pro;
Programmierung: VBA, Relikte mit VB6, aktuell VB.NET 2015

erstellt am: 19. Sep. 2017 09: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 Nur für remtc 10 Unities + Antwort hilfreich

Tja, mir geht's da eher wie Stefan, wenn ich den Code nicht direkt vor Augen hätte, würde ich mir den wohl eher nicht anschauen- extra runterladen- nö.
Aber so hat jeder seine Vorlieben, allen recht machen hat noch nie funktioniert.

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

http://www.alko-tech.com | mein Gästebuch

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 19. Sep. 2017 10:04    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 für den Hilfreichen Tipp

zum Code von hier

Code:
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swDrawing As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim fileName As String
Dim errors As Long
Dim warnings As Long
Dim status As Boolean

Sub main()

    Set swApp = Application.SldWorks

    ' Open drawing document that has a projected view
    '*fileName = "C:\Program Files\SOLIDWORKS Corp\SOLIDWORKS\samples\tutorial\advdrawings\foodprocessor.slddrw"
    Set swModel = swApp.OpenDoc6(fileName, swDocDRAWING, swOpenDocOptions_Silent, "", errors, warnings)
    Set swDrawing = swModel
    Set swModelDocExt = swModel.Extension

    ' Make the projected view the active view
    status = swDrawing.ActivateView("Drawing View2")
    status = swModelDocExt.SelectByID2("Drawing View2", "DRAWINGVIEW", 0.4426278247583, 0.3837831481976, 0, False, 0, Nothing, 0)
    Set swView = swDrawing.ActiveDrawingView
   

    ' Determine whether the projected view is linked to the
    ' parent configuration
    Call LinkConfiguration

    ' Link the projected view to the parent
    ' configuration
    swView.LinkParentConfiguration = True

    ' Determine whether the projected view is linked to the
    ' parent configuration
    Call LinkConfiguration

End Sub

Private Sub LinkConfiguration()
' Print to the Immediate window whether
' the projected view is linked to the parent
' configuration
    status = swView.LinkParentConfiguration
    If status Then
        Debug.Print "Projected view now linked to parent configuration."
        swModel.EditRebuild3
    Else
        Debug.Print "Projected view not linked to parent configuration."
    End If
End Sub


bekomme ich in der Fett gedruckten Zeile bereits einen Laufzeitfehler 91

hätte jemand eine Anregung?

@ Stefan ich habe bisher noch keinen Code mit dem dopppelten Doppelpunkt gesehen - wie kann ich den richtig anweden (View::LinkParentConfiguration)?

Danke

Michael

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: 8702
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: 19. Sep. 2017 11: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 remtc 10 Unities + Antwort hilfreich

Hallo remtc,

der Laufzeitfehler 91 bedeutet "Object variable not set (Error 91)", in diesem Fall wird deine swmodel nicht gesetzt sein. Das kommt daher, dass die in der Zeile oben drüber durch das swApp.OpenDoc6 zugewiesen wird, darin benutzt du als Pfad zu der zu öffnenden Datei die Variable filename, die hast du aus dem Beispiel geholt und in deinem Makro auskommentiert. Ergo ist filename ein Leerstring, das OpenDoc6 kann nichts laden (und den Fehlercode dazu wirst du in errors und warnings finden), deswegen ist swmodel dann Nothing und wenn du von diesem nicht vorhandenen Objekt dann die ModelDocExtension holen willst macht das Makro die Grätsche - "Objekt Variable nicht gesetzt"  

Also entweder nicht das swmodel durch OpenDoc6 setzen, sondern durch    

   Set swmodel = swApp.ActiveDoc

oder einen gültigen Pfad in filename eintragen.

Zu der anderen Frage: die Schreibweise mit dem Doppelpunkt ist die allgemeine Objektschreibweise, wie sie in der API-Hilfe genutzt wird. Für VB/VBA machst du aus dem Doppelpunkt praktisch einfach nur einen Punkt, so ist die Objekt-Methoden-Schreibweise da. Schau dir das mal in der API Hilfe an, da wirst du diese Arten der Schreibweise immer wieder finden.

Ciao,
Stefan

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

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 19. Sep. 2017 13:58    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,

ich merke das die Stolperfallen nicht kleiner werden...

in der APIHilfe steht:

Code:
Dim instance As IView
Dim value As System.Boolean

instance.LinkParentConfiguration = value

value = instance.LinkParentConfiguration

also das Value 1 ist wenn der Link zwischen Elternansicht und Abgeleiteter Ansicht existiert und 0 wenn nicht -und instance ist der Zeiger dahin?

in "meinem" Programm hat sich die Fehlermeldung zwar von der Zeile her verschoben jedoch nicht vom Inhalt:

Code:
Option Explicit

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swDrawing As SldWorks.DrawingDoc
Dim swView As SldWorks.View
Dim fileName As String
Dim errors As Long
Dim warnings As Long
Dim status As Boolean
Dim instance As IView


Sub main()

    Set swApp = Application.SldWorks

    ' Open drawing document that has a projected view
    Set swModel = swApp.ActiveDoc
    Set swDrawing = swModel
    Set swModelDocExt = swModel.Extension

    ' Make the projected view the active view
    status = swDrawing.ActivateView("Drawing View2")
    status = swModelDocExt.SelectByID2("Drawing View2", "DRAWINGVIEW", 0.4426278247583, 0.3837831481976, 0, False, 0, Nothing, 0)
    Set swView = swDrawing.ActiveDrawingView
   

    ' Determine whether the projected view is linked to the
    ' parent configuration
    Call LinkConfiguration

    ' Link the projected view to the parent
    ' configuration
    swView.LinkParentConfiguration = True

    ' Determine whether the projected view is linked to the
    ' parent configuration
    Call LinkConfiguration

End Sub

Private Sub LinkConfiguration()
' Print to the Immediate window whether
' the projected view is linked to the parent
' configuration
    status = swView.LinkParentConfiguration
    If status Then
        Debug.Print "Projected view now linked to parent configuration."
        swModel.EditRebuild3
    Else
        Debug.Print "Projected view not linked to parent configuration."
    End If
End Sub


Mein Plan wäre sobald das Makro auf einem Blatt funktioniert in die While Schleife mit aufzunehmen - jedoch hab ich wohl ein Problem mit dem

"swView.LinkParentConfiguration" oder "instance.LinkParentConfiguration"

muss ich dafür eine Bibliothek noch zusätzlich laden oder liegt es an SW oder ist da eine Falle die ich noch nicht gesehen habe (Rechtschreibfehler oä.)? Ich habe eine Zeichnung mit einem Blatt und zwei Ansichten (Blattformat1, Ansicht1 und abgeleitete Ansicht2)

Danke

Michael

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 19. Sep. 2017 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

ein weiterer Stein in meinem anfänglich funktionierendem Code ist die Frage ob ich

Code:
Viewname = Sheet.CustomPropertyView

durch einen alternativen Namen ersetzen kann. Dieses CustomPropertyView bezieht sich auf den Konfigurationsnamen, der ist aber häufig "Standard" und es wird ein Stücklisten Name vergeben. Wie kann ich den erreichen? oder sind die benutzerdefinierten Eigenschaften ein Array? und wenn ja wie komme ich daran?

Vielen Dank

Michael

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: 8702
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: 20. Sep. 2017 08:27    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 remtc 10 Unities + Antwort hilfreich


30868_debuggen-menu.png


30868_debuggen-einzelschritt.png

 
Hallo Michael,

Ich finde es schön, dass du dich da durchbeißen willst - Makroprogrammierung von SolidWorks ist gerade am Anfang nicht ganz trivial weil man sowohl etwas von Programmierung (vorzugsweise VB/VBA) als auch von SolidWorks verstehen muss.

Bei deinen Fragen und Fehlern bei der Ausführung deines Codes fällt mir auf, dass du noch in einer grundlegenden Fehleinschätzung verhaftet bist, die gerade Programmieranfänger passiert: die Codes machen nicht das, was du gerne möchtest oder dir vorstellst, sondern genau das, was du in deinem Code vorgibst und die Rahmenbedingungen hergeben. Ich vergleich das manchmal mit einem blinden, tauben, überaus dämlichen, aber absolut gehorsamen und wirklich starken Roboter, den du mit einer brennenden Fackel durch einen Pulverbunker navigieren willst, um den Raum dahinter auszulechten     

Deswegen ist das wichtig zu verstehen, was dein Code macht, Schritt für Schritt, wie die Rahmenbedingungen in dem Moment sind, bei dem der Schritt gemacht wird und was der Robot tut und nicht das was man gerne möchte, dass er macht. Dafür gibt es im Makroeditor zum Testen bzw. zur Fehleranalyse einfache Hilfsmittel wie das Debuggen im Einzelschritt, Haltepunkte, Direktfenster usw. (siehe Screenshots). Damit sollte sich jeder Anfänger erst mal auseinander setzen, um das Werkzeug kennen zu lernen. Du solltest bei einem Auto auch die Bremse und die Kupplung kennen, bevor du auf's Gas drückst  

In diesem Sinne zu deinem letzten Code ein paar Hinweise: du bekommst jetzt unten bei swView.LinkParentConfiguration wieder der Laufzeitfehler 91. So weit so gut, wie oben schon deutet das darauf hin, das swView Nothing ist (also nicht gesetzt). Das kann am Context liegen (das es also z.B. eine lokale Variable ist), aber da swView im Headerbereich deklariert wurde ist es eine Modulvariable und im ganzen Context des Moduls gültig.

Kann es also nur noch die Zuweisung sein. Die hast du wieder aus dem Beispielcode der API-Hilfe kopiert:

Code:
status = swDrawing.ActivateView("Drawing View2")
    status = swModelDocExt.SelectByID2("Drawing View2", "DRAWINGVIEW", 0.4426278247583, 0.3837831481976, 0, False, 0, Nothing, 0)
    Set swView = swDrawing.ActiveDrawingView


Da versuchst du also eine Zeichenansicht namens "Drawing View 2" zu aktivieren, diese zu selektieren und weist dann dem swView diese Ansicht zu. Da es hinteher einen Fehler 91 gibt bin ich mir recht sicher, dass du in deiner Zeichnung keinen "Drawing View 2" hast, sondern vielleicht eine "Zeichenansicht2" oder so.

Um das Makro einfach nur zu probieren willstdu aber ja einfach nur eine Zeichenansicht aktiv haben, also reicht die eine fett markierte Zeile aus und selektierst deine gewünschte Zeichenansicht in der Zeichnung einfach vor dem Starten.

So viel mal in erster Lesung, zu dem anderen später vielleicht noch was  

Ciao,
Stefan


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

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 20. Sep. 2017 10: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

Hallo und vielen Dank das du so geduldig mit mir bist 

ja wenn ich gut programmieren könnte hätte ich auch Informatiker werden können 

Das LinkParentConfig funktioniert tatsächlich für ein Blatt und die "Zeichenansicht2" jetzt der Kniff - wie kann ich es machen das nicht nur  Konstant Zeichenansicht2 geprüft wird sondern jede abgeleitete Ansicht auf dem Blatt?

Code:
Set swModel = swApp.ActiveDoc
                   
Set swDrawing = swModel
                   
Set swModelDocExt = swModel.Extension
                   
status = swDrawing.ActivateView("Zeichenansicht2")                '* Make the projected view the active view - hier müsste die abgeleitete Ansicht als variable rein?

Set swView = swDrawing.ActiveDrawingView                        ' Determine whether the projected view is linked to the parent configuration

Call LinkConfiguration


Ebenso zu meinem nächsten Bug(?)

Ich denke das ich den nötigen Befehl gefunden habe (CustomInfo) jedoch bekomme ich noch nicht den passenden Namen rein. Wo wird der definiert? Ist das der Name in der Tabelle der Benutzerdefinierten Eigenschaften? Ich weiß das es bei einem Block unter $PRPVIEW:{Stücklistenname} finde - Ist das zufällig der gleiche Name? Wenn ja dann bin doch auf dem falschen Dampfer mit dem CustomInfo 

Code:
ConfigName = "???"                                                      '* Namen zurücksetzen
           
            Set Model = swApp.ActiveDoc

            'Set MyPropMan = MyExt.CustomPropertyManager("")                        'Wenn Konfigurationsspezifisch, dann hier eintragen
            'Viewname = Sheet.CustomPropertyView
            'Viewname = Sheet.Model.ViewAlternateNameInBOM
            Viewname = Model.CustomInfo("Stücklistenname")                          '* variable im Array?
            'Viewname = Sheet.Model.CustomPropertyManager("Stücklistenname")
            'ActiveConfig.AlternateName                                            '* den Viewnamen aus den Blatteigenschaften auslesen
           
            Set View = DrawingDoc.GetFirstView                                      '* dann den passenden View suchen,d er erste View ist immer das Blatt selbst


Die Einzelschritte nutze ich bereits - aber das man mit der Maus über den Variablen stehen bleiben kann und dann den Inhalt sieht ist neu für mich 

Vielen Dank für die konstruktive Hilfe bisher 

Michael

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: 8702
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: 20. Sep. 2017 10:56    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 remtc 10 Unities + Antwort hilfreich


30868_custompropertyview.png

 
Hallo Michael,

Zitat:
Original erstellt von remtc:
Das LinkParentConfig funktioniert tatsächlich für ein Blatt und die "Zeichenansicht2" jetzt der Kniff - wie kann ich es machen das nicht nur  Konstant Zeichenansicht2 geprüft wird sondern jede abgeleitete Ansicht auf dem Blatt?

Na ja, du musst einen Loop über alle Ansichten (Views) des Blattes machen, das hast du ja aber im allerersten Makro aus der MakroMania oben schon drin. Da heißt die Objektvariable, in der die Ansichten durchlaufen werden, eben einfach nur View und nicht swView. Aus deinem Beitrag oben also den Codeschnipsel bereinigen, so dass es so aussieht:
Code:
' solange es noch eine Ansicht gibt
While Not View Is Nothing
   ' Link the projected view to the parent configuration
   View.LinkParentConfiguration = True

   ' ... und die nächste Ansicht
   Set View = View.GetNextView
Wend


Bei dem zweiten Teil der Frage bin ich mir nicht so sicher, worauf du hinaus willst. Was willst du denn letztlich haben, willst du den Namen der referenzierten Konfiguration aus dem Elternview haben? Oder die referenzierte Konfiguration der Ansicht, die in den Blatteigenschaften angegeben ist, dazu brauchst du dann dieses Sheet.CustomPropertyView.

Das gibt dir nicht irgeneine Konfiguration! Sondern das gibt dir eben zurück, was in den Blatteigenschaften dort als Ansicht eingetragen, von der dann das Modell und die entsprechende referenzierte Konfiguration egenutzt wird, wenn auf Dateieigenschaften des Modells verlinkt wird. "Standard" bedeutet in dem Zusammenhang nicht eine Konfiguration "Standard", sondern das Standardverhalten von SolidWorks, wenn nicht explizit eine Zeichenansicht angegeben wird. Dann wird die erste ins Blatt eingefügte Zeichenansicht dafür genutzt, egal wie die heißt. Deswegen in dem Ursprungscode auch die unterscheidung nach "Standard" oder direkt angegebener Zeichenansicht.

In beiden Fällen hast du nur den Namen der Ansicht. Die musst du dir dann auf irgendeinem Weg holen (z.B. in dem Loop die Namen vergleichen), davon das Modell, was darin dargestellt wird ( View::GetReferencedModelName ), die referenzierte Konfiguration ( View::ReferencedConfiguration ) und davon dann das passende ModelDoc mit der Konfiguration holen und über den PropertyManager die Dateieigenschaften auslesen.

Als Programmierer musst du wie in diesem Fall oft sehr viele kleine Schritte selbst machen, die in SolidWorks interaktiv vom Benutzer mit einem Klick erledigt sind ...

Ciao,
Stefan

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

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 20. Sep. 2017 12: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


Dateiinfo.PNG

 
Hallo

WUHU!  die Verlinkung zu den Eltern Konfigs passt  schon blöd wenn man zu viel Code drin hat ^^ DANKE!!!!!

zum zweiten Punkt:

Im 3D Teil wird dem Bauteil ein Stücklistenname zugewiesen. Dieser muss ja auslesbar sein - in dem Moment wenn sich die Ansicht auf der zeichnung befindet - dazukommt, dass alle Ansichten die selben Konfigurationen besitzen - daher können keine unterschiedlichen Stücklistennamen pro Blatt vorhanden sein. Auf diesen Stücklistennamen (im Foto "Grundkörper...") möchte ich mich nun beziehen.

bei dem Code

Code:
Viewname = Sheet.CustomPropertyView

hast du recht erhalte ich den Blatteigenschaften Namen. Ich möchte aber gerne Stücklistennamen aus dem Modell der Ansicht - da alle Ansichten mit der Elternansicht Verknüpft sind ist es mir sogar Wurst wie häufig der (viewname) mit dem selben Namen (Stücklistenname) überschrieben wird bis er letztendlich ausgegeben wird - wichtig ist nur das es sich dabei um die Ansicht des Teils handelt und nicht vom Blattrahmen.

Deswegen habe ich mit verschiedenen Ansätzen rumexperimentiert - wenn auch wie ein Grobmotoriker...

Code:
            ConfigName = "???"                                                      '* Namen zurücksetzen
           
            Set Model = swApp.ActiveDoc

            'Set MyPropMan = MyExt.CustomPropertyManager("")                        'Wenn Konfigurationsspezifisch, dann hier eintragen
            'Viewname = Sheet.CustomPropertyView
            'Viewname = Sheet.Model.ViewAlternateNameInBOM
            'Viewname = Model.CustomInfo("Stücklistenname")                          '* variable im Array?
            Viewname = Sheet.Model.CustomPropertyManager("Stücklistenname")
            'ActiveConfig.AlternateName                                            '* den Viewnamen aus den Blatteigenschaften auslesen
           
            Set View = DrawingDoc.GetFirstView                                      '* dann den passenden View suchen,d er erste View ist immer das Blatt selbst
           
            If Viewname = "Standard" Then                                          '* wenn der Viewname "Standard" ist wird der erste View genommen
               
                Set View = View.GetNextView                                        '* also die Konfig aus dem Modell des ersten Views holen
                ConfigName = View.ReferencedConfiguration
           
            Else                                                                    '* ansonsten die View suchen, deren Namen angegeben ist
                While Not View Is Nothing
                    If View.GetName2 = Viewname Then
                        ConfigName = View.ReferencedConfiguration
                    End If
                    Set View = View.GetNextView
                Wend
            End If


hier ist wieder der Fehler - aber ich bin mir nicht sicher wie genau ich daran komme.

Vielen Dank nochmal

Michael

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: 8702
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: 21. Sep. 2017 08:44    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 remtc 10 Unities + Antwort hilfreich

Hallo Michael,

da kommen wir der Sache ja langsam näher 

Zitat:
Original erstellt von remtc:
Im 3D Teil wird dem Bauteil ein Stücklistenname zugewiesen.

[Klug******ermodus AN] Da habe ich beim ersten Lesen an die Konfigurationseigenschaft in den Stücklistenoptionen gedacht, aber du meinst eine Dateieigenschaft namens "Stücklistenname", oder? [Klug******ermodus AUS]

Zitat:
Original erstellt von remtc:
Dieser muss ja auslesbar sein - in dem Moment wenn sich die Ansicht auf der zeichnung befindet - dazukommt, dass alle Ansichten die selben Konfigurationen besitzen - daher können keine unterschiedlichen Stücklistennamen pro Blatt vorhanden sein. Auf diesen Stücklistennamen (im Foto "Grundkörper...") möchte ich mich nun beziehen.

Okay, bei den Rahmenbedingungen brauchst du das Geraffel mit dem Umweg über die in den Blatteigenschaften eingetragene Zeichenansicht ja nicht machen, sondern nimmst dir einfach die erste "ecjte" Zeichensicht, also den zweiten View des Blattes.

Davon holst du dir wie oben beschrieben das referenzierte Modell, merkst dir den Namen der referenzierten Konfiguration und holst dir von diesem Modell in der Konfiguration den Wert deiner Dateieigenschaft. Eh voilá.

In Code gegossen sieht das dann so aus:

Code:
' ******************************************************************************
' Makro soll eine konfigurationsspezifische Dateieigenschaft vom Modell aus
' der ersten Zeichensicht im Blatt ermitteln werden.
' In diesem Beispiel heißt die Dateieigenschaft "StüLiText"
' ******************************************************************************

Dim swApp                          As Object
Dim DrawingDoc                      As Object
Dim View                            As Object

Dim ModelDocFromDrawingView        As Object
Dim ConfigNameFromDrawingView      As String

Dim FilePropValue                  As String

Sub main()
   
    ' SolidWorks ansprechen und das aktuelle Dokument holen, sollte
    ' eine Zeichnung mit mindestens  einer Zeichenansicht sein
    Set swApp = Application.SldWorks
    Set DrawingDoc = swApp.ActiveDoc

    ' der Name der Konfiguration des Modell der ersten Zeichenansicht
    ' wird jetzt ermittelt
    ConfigNameFromDrawingView = "???"
   
    ' der erste View eines Blattes ist immer das Blatt selbst, also brauchen
    ' wir den "zweiten" View, das ist die erste eingefügte Zeichenansicht
    Set View = DrawingDoc.GetFirstView
    Set View = View.GetNextView

    ' jetzt von diesem View das Modell und die darin referenzierte
    ' Konfiguration ermitteln
    ConfigNameFromDrawingView = View.ReferencedConfiguration
    Debug.Print ConfigNameFromDrawingView

    ' das ModelDoc des Modells aus dieser Zeichenansicht holen
    Set ModelDocFromDrawingView = View.ReferencedDocument
   
    ' von diesem ModelDoc dann von der referenzierten Konfiguration
    ' die gewünschet Dateieigenschaft auslesen, in diesem Fall mit
    ' der alten Methode ohne CustomPropertyManager
    FilePropValue = ModelDocFromDrawingView.CustomInfo2(ConfigNameFromDrawingView, "StüLiText")
    Debug.Print FilePropValue

End Sub



Wie du siehst versuche ich meine Codes a) sauber zu halten und b) habe ich in der Regeln mehr Kommentare als eigentliche Codezeilen drin, damit ich (und ggf. andere Leute  ) auch in 5 Jahren noch nachvollziehen können, warum das so gemacht war bzw. wie es gedacht war.

Ich hoffe, du kannst nachvollziehen und verstehen, wie das funktioniert, warum es funktioniert, wo die Fallstricke sind (die hier natürlich nicht abgefangen werden) und wo die Ansätze sind, die du in dein Gesamtmakro jetzt übertragen musst. Und ich hoffe, dass du damit weiter kommst und damit vielleicht sogar etwas Spaß an der Sache bekommst.

Ciao,
Stefan

PS: Allein mit dem Hin und Her und Schreiben und Probieren usw. haben wir beide sicherlich viel mehr Zeit verbracht, als hätte ich oder jemand anderes einfach ein fertiges Makro geschrieben oder als hättest du es beauftragt. Aber so haben hoffentlich wir und auch noch einige Andere eine paar Anregungen bekommen, die helfen. Falls also mal keine Zeit für so was ist ... 

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

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

remtc
Mitglied



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

Beiträge: 14
Registriert: 18.09.2017

Solidworks Prof. 2017SP3 x64 auf Win 7

erstellt am: 21. Sep. 2017 09: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 Stefan - hallo Mitleser

um es mit den Worten von Dr. Frankenstein zu sagen: "ES LEEEEEEEEEBT!!!!!!!"

VIELEN DANK!

Die Frage warum der Code so funktioniert sollte natürlich nebendem Fakt das es funktioniert im Vordergrund stehen. Jedoch verstehe ich nicht warum bei deinem Code

Code:
  ConfigNameFromDrawingView = View.ReferencedConfiguration

die Zeile funktioniert und bei meinen Versuchen nicht...

ebenso versteh ich die Zeile

Code:
Debug.Print ConfigNameFromDrawingView

nicht. Trotzdem bin ich sehr dir sehr dankbar!

Grüße Michael

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: 8702
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: 21. Sep. 2017 11:41    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 remtc 10 Unities + Antwort hilfreich


30868_debuggen-direktbereich.png

 

Zitat:
Original erstellt von remtc:
ebenso versteh ich die Zeile

Code:
Debug.Print ConfigNameFromDrawingView

nicht.



Das kann ich noch schnell eben klären, das dient nur der Ausgabe im Direktfenster, damit man auch mal während des Testens gucken kann, ob denn die angenommenen Daten zurückgeliefert werden oder wo man gerade im Quellcode ist oder oder oder. Debug.print ist vermutlich immer noch das am häufigsten benutze Fehleranalysetool 

Den Direktbereich kannst du im Makroeditor mit STRG-G oder im Ansichtmenu/Direktbereich aufmachen. Alles, was du dann im Quellcode mit Debug.Print ausgibst landet dort. Für das eigentlich Makro hat es keinen Zusatznutzen und könnte weggelassen werden.

Ciao,
Stefan

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

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)2018 CAD.de