Ich möchte von einem Drawing Dokument ein PDF speichern, jedoch mit dem Revisionsindex der gezeichneten Komponente, also mit dem Revisionsindex der Baugruppe oder des Teils, welches auf der Zeichnung dargestellt wurde.
Können Sie mir einen Tipp geben?
{Solution1}
<pre class="wp-block-syntaxhighlighter-code">Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks
Dim swModelDoc As ModelDoc2
Set swModelDoc = swApp.ActiveDoc
Dim names As Variant
names = swApp.GetDocumentDependencies2(swModelDoc.GetPathName, False, True, False)
Dim docType As swDocumentTypes_e
If Right(names(1), 6) = "SLDPRT" Then
docType = swDocPART
ElseIf Right(names(1), 6) = "SLDASM" Then
docType = swDocASSEMBLY
End If
Dim nErrors As Long
Dim nWarnings As Long
Dim swDepModelDoc As ModelDoc2
Set swDepModelDoc = swApp.OpenDoc6(names(1), docType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Dim swCustPropMgr As CustomPropertyManager
Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager("")
Dim valOut As String
Dim resValOut As String
swCustPropMgr.Get6 "Revision", False, valOut, resValOut, False, False
Debug.Print valOut
Debug.Print resValOut
End Sub</pre>
Code-Sprache: VB.NET (vbnet)
{Solution2}
<pre class="wp-block-syntaxhighlighter-code">Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks
Dim swModelDoc As ModelDoc2
Set swModelDoc = swApp.ActiveDoc
Dim swDrawingDoc As DrawingDoc
Set swDrawingDoc = swModelDoc
Dim swView As View
Set swView = swDrawingDoc.GetFirstView
Set swView = swView.GetNextView
Dim refModelName As String
refModelName = swView.GetReferencedModelName
Debug.Print refModelName
Dim docType As swDocumentTypes_e
If Right(refModelName, 6) = "SLDPRT" Then
docType = swDocPART
ElseIf Right(refModelName, 6) = "SLDASM" Then
docType = swDocASSEMBLY
End If
Dim nErrors As Long
Dim nWarnings As Long
Dim swDepModelDoc As ModelDoc2
Set swDepModelDoc = swApp.OpenDoc6(refModelName, docType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Dim swCustPropMgr As CustomPropertyManager
Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager("")
Dim valOut As String
Dim resValOut As String
swCustPropMgr.Get6 "Revision", False, valOut, resValOut, False, False
Debug.Print valOut
Debug.Print resValOut
End Sub</pre>
Code-Sprache: VB.NET (vbnet)
Guten Tag Herr Hornemann
Bestimmt erinnern Sie sich, ich bin der „Verursacher“ der obigen Beispiele zu „Zuschauerfrage die Erste“.
Ihren Code habe ich nach unserem Zoom Meeting zu unten stehendem Makro zusammengeschusstert und verwende dieses bereits einige Zeit.
Es funktioniert eigentlich ganz gut, aber mit Vorbehalt für konfigurierte Komponenten, falls ich z.B. den die „Beschreibung“ für jede Konfiguration ändert.
Das Makro holt sich via Zeichnungsansicht die „Beschreibung“ der Komponente aus den „Benutzerspezifischen“ Eigenschaften.
Damit jeweils die Konfigurationsspezifische Eigenschaft gelesen wird, setze ich in den Benutzerspezifischen Eigenschaften für „Beschreibung“ den Wert $PRP:“Beschreibung“ ein. So wird bei aktuell gespeicherter Datei, der konfigurationsspezifische Wert für „Beschreibung“ in den Benutzerspezifischen Eigenschaften hinterlegt und für das PDF als Beschreibung in den Dateinamen übernommen.
Das Problem liegt nun dabei, dass dieser Wert nur dann der gewünschten Konfiguration entspricht, wenn die Komponente im Hintergrund geöffnet ist und auf den entsprechenden Konfiguration gespeichert wurde.
Falls eine andere Konfiguration gespeichert ist, erscheint die Beschreibung dieser anderen Konfiguration im Dateinamen des PDF.
Bisher habe ich mir so geholfen, dass ich jeweils vor dem Speichern des PDF:
> via rechte Mausklick auf die Zeichnungsansicht, die Komponente öffnen (sie öffnet auf der entsprechenden Konfiguration)
> speichern der Komponente mit aktueller Konfiguration,
> anschliessend mit dem Makro unten das PDF erstellen.
das ist fehleranfällig und zeitaufwendig.
Können Sie mir zeigen, wie ich das Makro erweitern/verbessern kann, damit dieses das Speichern der Komponente in der zur Zeichnungsansicht verknüpften Konfiguration automatisch (z.B. silent) ausführt?
Oder vielleicht direkt den Wert für „Beschreibung“ aus der Konfigurationsspezifischen Eigenschaften liesst?
Ich danke bereits im Voraus.
Freundliche Grüsse
Pius Bühlmann
aktuelles Makro:
‚Aus Hornemann „Folge 9″**************
‚************************************
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks
Dim swModel As ModelDoc2
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
swApp.SendMsgToUser „Kein Dokument geladen.“
Exit Sub
End If
Dim Errors As Long
Dim Warnings As Long
Dim FullName As String
Dim ReturnValue As Boolean
FullName = swModel.GetPathName
Dim laenge As Integer
laenge = Len(FullName)
Debug.Print „Fullname: “ & FullName
Debug.Print „Fullname Länge: “ & laenge
‚***********************************************************************************
‚Einschub aus Hornemann „Zuschauerfrage die Erste“
Dim swModelDoc As ModelDoc2
Set swModelDoc = swApp.ActiveDoc
Dim names As Variant
names = swApp.GetDocumentDependencies2(swModelDoc.GetPathName, False, True, False)
Dim docType As swDocumentTypes_e
If Right(names(1), 6) = „SLDPRT“ Then
docType = swDocPART
ElseIf Right(names(1), 6) = „SLDASM“ Then
docType = swDocASSEMBLY
End If
Dim nErrors As Long
Dim nWarnings As Long
Dim swDepModelDoc As ModelDoc2
Set swDepModelDoc = swApp.OpenDoc6(names(1), docType, swOpenDocOptions_Silent, „“, nErrors, nWarnings)
Dim swCustPropMgr As CustomPropertyManager
Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager(„“)
Dim valREV As String
Dim resValREV As String
swCustPropMgr.Get6 „Revision“, False, valREV, resValREV, False, False
Dim valBeschreibung As String
Dim resBeschreibung As String
swCustPropMgr.Get6 „Beschreibung“, False, valBeschreibung, resBeschreibung, False, False
‚***********************************************************************************
FullName = Left(FullName, laenge – 7) & „-“ & resValREV & „_“ & resBeschreibung & „.pdf“
Debug.Print „Fullname: “ & FullName
Dim swExportPdfData As ExportPdfData
Set swExportPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)
swExportPdfData.ViewPdfAfterSaving = True
ReturnValue = swExportPdfData.SetSheets(swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, „“)
Dim sheetNames(13) As String
sheetNames(0) = „Blatt1“
sheetNames(1) = „Blatt2“
sheetNames(2) = „Blatt3“
sheetNames(3) = „Blatt4“
sheetNames(4) = „Blatt5“
sheetNames(5) = „Blatt6“
sheetNames(6) = „Blatt7“
sheetNames(7) = „Blatt8“
sheetNames(8) = „Blatt9“
sheetNames(9) = „Blatt10“
sheetNames(10) = „Blatt11“
sheetNames(11) = „Blatt12“
sheetNames(12) = „Blatt13“
Dim varSheetNames As Variant
varSheetNames = sheetNames
ReturnValue = swExportPdfData.SetSheets(swExportDataSheetsToExport_e.swExportData_ExportSpecifiedSheets, varSheetNames)
ReturnValue = swModel.Extension.SaveAs3(FullName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExportPdfData, Nothing, Errors, Warnings)
Debug.Print „Errors: “ & Errors
Debug.Print „Warnings: “ & Warnings
Debug.Print „Return Value: “ & ReturnValue
End Sub
Hallo Herr Bühlmann,
ich erinnere mich sehr gut daran.
Die Lösung ist sehr einfach. Allerdings empfehle ich Ihnen meine Solution 2 zu wählen, weil dafür nur eine sehr kleine Änderung notwendig ist. Sie müssen dann nur Zeile 36 von
Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager(„“)
auf
Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager(swView.ReferencedConfiguration)
ändern und schon wird die Konfigurationsinformation ausgelesen.
Meine Solution 1 gibt das in dieser Kürze nicht her.
Sollten Sie noch weitere Fragen haben, können Sie mich seit Neustem auch auf meinem Discord antreffen.
https://discord.gg/3H6QpMeTP3
Beste Grüße
Bernd Hornemann
Guten Tag Herr Hornemann,
ich versuche, in Solidworks Premium 2020 bereits angelegten Sensoren automatisch abzufragen und deren Werte in csv Dateien automatisch abzuspeichern. Ich habe es mit der integrierten Makrosaufnahme versucht. Leider wird die Sequenz „Sensorabfrage“ nicht berücksichtigt (die Makroschaltfläche, die normalerweise während der Aufnahme aktiv ist, ist während der Sensorabfrage grau). Hätten Sie einen Tip, wie diese Problematik gelöst werden kann?
Beste Grüße
Lionel Carré
Guten Tag Herr Carré,
haben Sie sich einmal das Beispiel im ISensor Interface angeschaut?
https://help.solidworks.com/2020/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.isensor.html
https://help.solidworks.com/2020/english/api/sldworksapi/Get_and_Set_Sensor_Example_VB.htm
Wenn das nicht hilft, dann sollten wir einmal ein Zoom Meeting machen. Schreiben Sie mir dazu eine Mail an swmp@berndhornemann.de mit Zeiten, wann Sie Zeit dafür haben.
Beste Grüße
Bernd Hornemann