Ik heb een programma dat de informatie in een assembly exporteert om een bestand te maken .xls
Het werkt perfect, behalve dat het de beschrijving van de configuratie niet retourneert wanneer het actief is.
bom-dlb.swp
Ik heb een programma dat de informatie in een assembly exporteert om een bestand te maken .xls
Het werkt perfect, behalve dat het de beschrijving van de configuratie niet retourneert wanneer het actief is.
Heeft u een kleine testassemblage met 2-3 onderdelen aan te leveren, om het probleem goed te situeren?
Niet dezelfde eigenschappen hebben, niet zeker om het goed te begrijpen.
En ook oorzaak SW-versie als je het probleem kunt aanwijzen (welke eigenschap je krijgt en welke je in je xls-bestand wilt)
Hallo
Als ik het goed begrepen heb, moet je een regel in de onderstaande methode wijzigen, zodat de macro op zoek gaat naar de informatie in het tabblad "specifiek voor de conferentie".
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
In plaats van swextention. CustomPropertyManager(""), swextention. CustomPropertyManager(swconf.name)
Bijgevoegd is een voorbeeld van montage
Normaal gesproken zou de nomenclatuur er als volgt uit moeten zien:
ERP Code Tree Beschrijving Aantal
1 1198 RDL NFE 25-514 M3x8 A2 1
2 2489 RDL NFE 25-514 M6x12 A2 1
Met het VBA-programma geeft het dit resultaat:
ERP-CODE TREE BESCHRIJVING AANTAL
-----1 001198 RDL NFE 25-514 MXX A2 2
Hallo
Dus ik heb net twee oplossingen getest. Als u de eigenschappen wilt doornemen, werkt uw tabel niet omdat deze de eigenschappen "Beschrijving" in de bestanden niet invult (vandaar de RDL NFE 25-514 MXX A2 als resultaat), dus u zou deze tabel moeten wijzigen door de parameter $PROPRIETE@Description toe te voegen.
Anders kunt u de beschrijving van de configuratie direct krijgen, in welk geval u de code als volgt moet wijzigen:
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
Om het te vereenvoudigen heb ik sDescription en het herstel van de beschrijving van de actieve configuratie toegevoegd.
Cyril-f. Dank u voor uw antwoord.
Ik heb een test gedaan. We komen dichter bij de waarheid.
Het resultaat is als volgt met de aanpassing om de configuratiebeschrijving direct op te halen:
ERP-CODE TREE BESCHRIJVING AANTAL
-0 Voorbeeld Standaard 1
--1 001198 RDL NFE 25-514 M3x8 A2 2
Maar er is nog steeds een probleem. Er moeten twee regels zijn.
ERP Code Tree Beschrijving Aantal
1 1198 RDL NFE 25-514 M3x8 A2 1
2 2489 RDL NFE 25-514 M6x12 A2 1
Hallo
Het probleem komt dus van het deel van de code hieronder in de module 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
De macro ziet niet dat er een ander bestand is, omdat het vertrouwt op de naam van het onderdeel dat identiek is, dus het gaat ervan uit dat het onderdeel al bestaat en voegt alleen een hoeveelheid toe.
Ik heb het zo aangepast, het werkt op componenten met een configuratie van het schroef-/ringtype... Aan de andere kant, op een bestand met een configuratie die in hoeveelheid 2 zou kunnen zijn (open/gesloten configuratie bijvoorbeeld) zal dit niet werken.
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
Het zal daarom waarschijnlijk nodig zijn om controlecriteria toe te voegen of om het te baseren op de Solidworks-nomenclaturen en het vervolgens te exporteren naar Excel.
Dank u voor uw hulp. Ik denk dat de juiste optie inderdaad is om te beginnen met de Solidworks-stuklijsten en deze vervolgens te exporteren naar Excel.