Ich programmiere viel in VBA Excel und möchte es in SW verwenden.
Ich möchte die benutzerdefinierten Daten eines Teils in einem Excel-Dokument extrahieren.
Also, wenn mir jemand helfen kann, lassen Sie mich einfach eine personalisierte Eigenschaft eines Raumes in msgbox erscheinen, nachdem ich mich auf den Rest vorbereitet habe.
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim val As String
Dim valout As String
Dim bool As Boolean
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim nNbrProps As Long
Dim vPropNames As Variant
Dim K As Long
Set cusPropMgr = swModelDocExt.CustomPropertyManager("")
nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
For K = 0 To nNbrProps - 1
bool = cusPropMgr.Get4(vPropNames(K), False, val, valout)
MsgBox vPropNames(K) & " - " & val & " - " & valout
Next K
End Sub
Die obigen Beispiele ermöglichen es Ihnen, die benutzerdefinierten Eigenschaften der Registerkarte "Anpassen" abzurufen, wenn Sie auch die der Registerkarte "Konfigurationsspezifisch" für jede Konfiguration abrufen möchten, können Sie ein Beispiel unter dem folgenden Link sehen: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm
Hallo zusammen und vielen Dank für Ihre Reaktionsfähigkeit. Meins ist nicht so gut, weil ich gerade sehr beschäftigt bin...
Ich hatte die verschiedenen Beiträge bemerkt, aber wenn ich in meinem Zimmer die benutzerdefinierte Eigenschaft "Finishing" habe und ich eine msgbox "RAL9010" möchte, wenn ich mein Makro ausführe, kann ich es nicht tun...
Wenn Sie SolidWorks von Excel aus steuern möchten, müssen Siedarüber nachdenken, SolidWorks in Excel mit einem "CreateObject" zu deklarieren und die notwendigen Referenzen in Ihr Makro einzufügen. Das Makro im ersten Beitrag funktioniert und zeigt eine msgbox an, die den "Eigenschaftsnamen - Textausdruck - Ausgewerteter Wert" für jede Eigenschaft auf der Registerkarte "Anpassen" enthält.
Sub Macro1()
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim val As String
Dim valout As String
Dim bool As Boolean
Set swApp = CreateObject("SldWorks.Application")
swApp.Visible = True
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim nNbrProps As Long
Dim vPropNames As Variant
Dim K As Long
Set cusPropMgr = swModelDocExt.CustomPropertyManager("")
nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
For K = 0 To nNbrProps - 1
bool = cusPropMgr.Get4(vPropNames(K), False, val, valout)
MsgBox vPropNames(K) & " - " & val & " - " & valout
Next K
End Sub
Tatsächlich funktioniert es sehr gut, es ist nur so, dass ich die benutzerdefinierte Eigenschaft und das konfigurationsspezifische lzq verwechselt habe... Was für eine Nudel pffff
Ist es möglich, das Gleiche mit den Besonderheiten zu tun?
Die obigen Beispiele ermöglichen es Ihnen, die benutzerdefinierten Eigenschaften der Registerkarte "Anpassen" abzurufen, wenn Sie auch die der Registerkarte "Konfigurationsspezifisch" für jede Konfiguration abrufen möchten, können Sie ein Beispiel unter dem folgenden Link sehen: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm
Set swCustProp = swConfig.CustomPropertyManager
boolstatus = swCustProp.Get5("xxx", False, ValOut, ResolvedValOut, WasResolved) 'Changer "xxx" par le nom de la propriété du fichier 3D
Ich stimme Cyril.f zu, hier ist ein Beispiel zum Lesen der Werte "Eigenschaftsname - Textausdruck - Wert ausgewertet" für jede Eigenschaft der aktiven Konfiguration:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim config As SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal As Long
Dim vPropNames As Variant
Dim ValOut As String
Dim ResolvedValOut As String
Dim wasResolved As Boolean
Dim nNbrProps As Long
Dim j As Long
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set config = swModel.GetActiveConfiguration
Set cusPropMgr = config.CustomPropertyManager
nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
For j = 0 To nNbrProps - 1
lRetVal = cusPropMgr.Get5(vPropNames(j), False, ValOut, ResolvedValOut, wasResolved)
Debug.Print vPropNames(j) & ", " & ValOut & ", " & ResolvedValOut
Next j
End Sub
Ich hatte einen Code, den ich unter SW2014 erstellt hatte, der auch wunderbar funktionierte, aber in SW2016 nicht mehr funktioniert.
Hier ist der fragliche Code:
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModelDoc As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim swPackAndGo As SldWorks.PackAndGo
Dim openFile As String
Dim myFileName As String
Dim pgFileNames As Variant
Dim pgFileStatus As Variant
Dim pgSetFileNames() As String
Dim pgGetFileNames As Variant
Dim pgDocumentStatus As Variant
Dim status As Boolean
Dim warnings As Long
Dim errors As Long
Dim i As Long
Dim j As Long
Dim namesCount As Long
Dim myPath As String
Dim statuses As Variant
Public Chemin, OldFile As String
Public Ligne1, DernligneASM
Sub ListerOldFichiers()
Dim Fichier As String
Range("A2:B1000") = "" 'Vidage des cellules
Chemin = CheminUser
OldFile = Dir(Chemin & "*.sldasm")
'Appel de la progressbar
UserForm1.Show vbModeless
UserForm1.ProgressBar1.Value = 0
Dim ProgressBar, barre
UserForm1.ProgressBar1.Value = 10
'Ecrire les noms de fichiers dans colone A
Ligne1 = 2 'Départ pour rentrer les noms de fichiers
Do While OldFile <> ""
Cells(Ligne1, 1) = OldFile
OldFile = Dir()
Ligne1 = Ligne1 + 1
Loop
DernligneASM = Range("a65536").End(xlUp).Row
Dim Dernligne2
Dernligne2 = Range("a65536").End(xlUp).Row + 1
OldFile = Dir(Chemin & "*.sldprt")
Do While OldFile <> ""
Cells(Dernligne2, 1) = OldFile
OldFile = Dir()
Dernligne2 = Dernligne2 + 1
Loop
UserForm1.ProgressBar1.Value = 50
Dim Dernligne3
Dernligne3 = Range("a65536").End(xlUp).Row
Ligne1 = 2
For Ligne1 = Ligne1 To Dernligne3
Dim DSO As DSOFile.OleDocumentProperties
Dim File1, OldDes, k, PropName, Compteur
File1 = Cells(Ligne1, 1).Value
Set DSO = New DSOFile.OleDocumentProperties
DSO.Open sfilename:=Chemin & File1
Compteur = DSO.CustomProperties.Count
If Compteur <> 0 Then
For k = 1 To Compteur - 1
PropName = DSO.CustomProperties.Item(k).Name
If PropName = "Designation-1" Then
OldDes = DSO.CustomProperties.Item("Designation-1").Value
Cells(Ligne1, 2) = OldDes
End If
Next k
End If
DSO.Save
DSO.Close
Next
'Fini de remplir et Decharger l'userform
barre = 100
UserForm1.ProgressBar1.Value = barre
Unload UserForm1
ProgressBar = 0 'Réinitialisation
MsgBox "Remplissez la colonne des Nouveaux noms a attribuer puis cliquez sur ''Renommer''"
End Sub
Die "DSO. "CustomProperties.Count" funktioniert nicht mehr... Nach dem, was ich sehen konnte, wäre es der DSO-Teil, der nicht mehr berücksichtigt wird. Aber ich weiß nicht, womit ich es ersetzen soll...
Es wäre besser, eine neue Frage zu erstellen, als eine bereits gelöste Frage in die Warteschlange zu stellen, da es einfacher ist, Antworten auf gegebene Probleme zu finden.
Da haben Sie es: http://www.lynkoa.com/forum/solidworks/r%C3%A9cupererecrire-propri%C3%A9t%C3%A9s-personalis%C3%A9s-avec-excel-sans-methode-dso-inactive-depuis
Die obigen Beispiele ermöglichen es Ihnen, die benutzerdefinierten Eigenschaften der Registerkarte "Anpassen" abzurufen, wenn Sie auch die der Registerkarte "Konfigurationsspezifisch" für jede Konfiguration abrufen möchten, können Sie ein Beispiel unter dem folgenden Link sehen: http://help.solidworks.com/2013/English/api/sldworksapi/Get_Custom_Properties_Example_VB.htm