Ich habe ein Programm, das die in einer Baugruppe enthaltenen Informationen exportiert, um eine Datei .xls
Es funktioniert perfekt, außer dass es die Beschreibung der Konfiguration nicht zurückgibt, wenn es aktiv ist.
bom-dlb.swp
Ich habe ein Programm, das die in einer Baugruppe enthaltenen Informationen exportiert, um eine Datei .xls
Es funktioniert perfekt, außer dass es die Beschreibung der Konfiguration nicht zurückgibt, wenn es aktiv ist.
Haben Sie eine kleine Testbaugruppe mit 2-3 Teilen zur Verfügung, um das Problem richtig zu lokalisieren?
Nicht die gleichen Eigenschaften zu haben, nicht sicher, ob ich es gut verstehe.
Und verursachen Sie auch die SW-Version, wenn Sie auf das Problem hinweisen können (welche Eigenschaft Sie erhalten und welche Sie in Ihrer xls-Datei haben möchten)
Hallo
Wenn ich es richtig verstanden habe, müssen Sie eine Zeile in der folgenden Methode so ändern, dass das Makro nach Informationen auf der Registerkarte "Spezifisch für die Konferenz" sucht.
Public Sub AddElementBOM(swComp As SldWorks.Component2, nLevel As Long)
Set swcustmng = swextention.CustomPropertyManager(swConf.Name) 'Va cherche dans l'onglet description des propriete personnaliser
Call swcustmng.Get6("Description", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
vBOM(UBound(vBOM)).m_Properties(4) = sPropRVal
End Sub
Statt Swextendion. CustomPropertyManager(""), swextention. CustomPropertyManager(swconf.name)
Beigefügt ist ein Beispiel für die Montage
Normalerweise sollte die Nomenklatur wie folgt aussehen:
ERP-Codebaum Beschreibung Menge
1 1198 RDL NFE 25-514 M3x8 A2 1
2 2489 RDL NFE 25-514 M6x12 A2 1
Mit dem VBA-Programm ergibt sich folgendes Ergebnis:
ERP-CODEBAUM BESCHREIBUNG MENGE
-----1 001198 RDL NFE 25-514 MXX A2 2
Hallo
Also habe ich gerade zwei Lösungen getestet. Wenn Sie die Eigenschaften durchgehen möchten, funktioniert Ihre Tabelle nicht , da sie die "Beschreibungs "-Eigenschaften in den Dateien nicht ausfüllt (daher die RDL NFE 25-514 MXX A2 als Ergebnis), sodass Sie diese Tabelle ändern müssten, indem Sie den Parameter $PROPRIETE@Description hinzufügen.
Andernfalls können Sie die Beschreibung der Konfiguration direkt abrufen, in diesem Fall müssen Sie den Code wie folgt ändern:
Public Sub AddElementBOM(swComp As SldWorks.Component2, nLevel As Long)
Dim sCompName As String
Dim i As Long
Dim swModel As SldWorks.ModelDoc2
Dim swcustmng As SldWorks.CustomPropertyManager
Dim swextention As SldWorks.ModelDocExtension
Dim sPropVal As String
Dim sPropRVal As String
Dim bWasResolve As Boolean
Dim bLinkto As Boolean
Dim swConf As SldWorks.Configuration
Dim sDescription As String
sCompName = swComp.Name2
sCompName = GetRealNameComp(sCompName)
Debug.Print sCompName
'Recherche element de tableau correspondant a sCompName si existe increement la compteur
For i = 1 To UBound(vBOM)
If vBOM(i).m_CompName = sCompName Then
vBOM(i).m_Count = vBOM(i).m_Count + 1
Exit Sub
End If
Next i
'Il n'existe pas je crée l'element
ReDim Preserve vBOM(UBound(vBOM) + 1)
vBOM(UBound(vBOM)).m_CompName = sCompName
vBOM(UBound(vBOM)).m_Count = 1
vBOM(UBound(vBOM)).m_FileName = swComp.GetPathName
vBOM(UBound(vBOM)).m_Level = nLevel
vBOM(UBound(vBOM)).m_RefConf = swComp.ReferencedConfiguration
Set swModel = swComp.GetModelDoc2
If nLevel = 0 Then
Set swConf = swModel.GetActiveConfiguration
Else
Set swConf = swModel.GetConfigurationByName(swComp.ReferencedConfiguration)
End If
vBOM(UBound(vBOM)).m_RealName = BOMPartNumber(swConf, swModel) 'La variable vBOM (Nom du fichier) = "BOMPartNumber" (Nom de la configuration)
Set swextention = swModel.Extension
Set swcustmng = swextention.CustomPropertyManager(swComp.ReferencedConfiguration)
'N° Proto
'Indice MAJEUR
'Libelle 02
'Matiere
Call swcustmng.Get6("N° Proto", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
vBOM(UBound(vBOM)).m_Properties(0) = sPropRVal
Call swcustmng.Get6("Indice MAJEUR", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
vBOM(UBound(vBOM)).m_Properties(1) = sPropRVal
Call swcustmng.Get6("Libelle 02", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
vBOM(UBound(vBOM)).m_Properties(2) = sPropRVal
Call swcustmng.Get6("Matiere", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
vBOM(UBound(vBOM)).m_Properties(3) = sPropRVal
'Set swcustmng = swextention.CustomPropertyManager("") 'Va cherche dans l'onglet description des propriete personnaliser
'Call swcustmng.Get6("Description", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
sDescription = swConf.Description
vBOM(UBound(vBOM)).m_Properties(4) = sDescription
End Sub
Zur Vereinfachung habe ich sDescription und die Wiederherstellung der Beschreibung der aktiven Konfiguration hinzugefügt.
Cyril-f. Vielen Dank für Ihre Antwort.
Ich habe einen Test gemacht. Wir kommen der Wahrheit immer näher.
Das Ergebnis sieht mit der Änderung zum direkten Abrufen der Konfigurationsbeschreibung wie folgt aus:
ERP-CODEBAUM BESCHREIBUNG MENGE
-0 Beispiel Standard 1
--1 001198 RDL NFE 25-514 M3x8 A2 2
Aber es gibt immer noch ein Problem. Es sollten zwei Linien vorhanden sein.
ERP-Codebaum Beschreibung Menge
1 1198 RDL NFE 25-514 M3x8 A2 1
2 2489 RDL NFE 25-514 M6x12 A2 1
Hallo
Das Problem ergibt sich also aus dem Teil des Codes unten im Modul AddElementBOM(swComp As SldWorks.Component2, nLevel As Long):
For i = 1 To UBound(vBOM)
If vBOM(i).m_CompName = sCompName Then
vBOM(i).m_Count = vBOM(i).m_Count + 1
Exit Sub
End If
Next i
Das Makro erkennt nicht, dass es eine andere Datei gibt, da es sich auf den Namen der Komponente verlässt, der identisch ist, so dass es davon ausgeht, dass die Komponente bereits existiert und nur eine Menge hinzufügt.
Ich habe es so modifiziert, es funktioniert bei Komponenten mit Schrauben-/Unterlegscheibenkonfiguration... Auf der anderen Seite funktioniert dies bei einer Datei mit einer Konfiguration, die in der Menge 2 sein könnte (z. B. offene/geschlossene Konfiguration), nicht.
For i = 1 To UBound(vBOM)
If vBOM(i).m_CompName = sCompName And swComp.ReferencedConfiguration = vBOM(i).m_RefConf Then
vBOM(i).m_Count = vBOM(i).m_Count + 1
Exit Sub
End If
Next i
Es wird daher wahrscheinlich notwendig sein, Kontrollkriterien hinzuzufügen oder auf den Solidworks-Nomenklaturen zu basieren und dann nach Excel zu exportieren.
Danke für Ihre Hilfe. Ich denke, die richtige Option ist in der Tat, mit den Solidworks-Stücklisten zu beginnen und sie dann nach Excel zu exportieren.