Stuklijst exporteren naar Excel met een VBA-macro

Hoi allemaal.

Ik heb een VBA-programma om mijn stuklijst in een .xls te exporteren

Alles gaat goed, behalve één optie die ik niet kan veranderen.

Ik zou graag willen dat het programma de huidige configuratie kiest.

Momenteel is het op zoek naar de configuratie met de naam "Standaard"

Configuratie = "Standaard"

Als iemand het antwoord weet:)

 

****************************

Stuklijsttabel invoegen en gegevensvoorbeeld extraheren (VBA)
In dit voorbeeld ziet u hoe u een stuklijsttabel invoegt en de gegevens daaruit extraheren.

'-------------------------------------------------------
' Randvoorwaarden:
" 1. Controleer of het gespecificeerde tekeningdocument moet worden geopend
' bestaat.
' 2. Open het venster Onmiddellijk.
'
' Postvoorwaarden:
' 1. Opent het opgegeven tekeningdocument.
' 2. Selecteert een tekening.
" 3. Voegt een stuklijsttabel in op het punt waar de tekening
" werd geselecteerd.
' 4. Bestudeer de tekening en het onmiddellijke venster.
'
' OPMERKING: Omdat de tekening elders wordt gebruikt, mag u deze niet
' Sla de wijzigingen op.
'-------------------------------------------------------

Optie Expliciete

Sub hoofd()

Dim xlApp als Excel.Application
Stel xlApp in = Nieuwe Excel.Toepassing
Dim wbk als Excel.Workbook
Dim sht als Excel.Werkblad

Met xlApp
. Zichtbaar = Waar
Stel wbk in = . Werkmappen.Toevoegen
Stel sht in = wbk. Actief blad
Eindigen met

Dim swApp als SldWorks.SldWorks
Dim swModel als SldWorks.ModelDoc2
Dim swModelDocExt als SldWorks.ModelDocExtension
Dim swBOMAnnotatie als SldWorks.BomTableAnnotation
Dim swBOMFeature As SldWorks.BomFeature
Dim boolstatus als Booleaanse
Dim BomType zo lang
Dim configuratie als tekenreeks
Dim TemplateName als tekenreeks

Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
Stel swModelDocExt = swModel.Extension in

TemplateName = "M:\DATABASE\TEMPLATES\05-Model van nomenclatuur\GP_ASM_Nomenclature BOS.sldbomtbt"
BomType = swBomType_Indented
Configuratie = "Standaard"
Stel swBOMAnnotatie in = swModelDocExt.InsertBomTable3(TemplateName, 0, 0, BomType, Configuratie, False, swNumberingType_Detailed, True)
Stel swBOMFeature = swBOMAnnotation.BomFeature in

swModel.ForceRebuild3 Waar

Dim NumCol zo lang
Dim NumRow zo lang
Dim ik zo lang
Zon J Zo lang

NumCol = swBOMAnnotatie.ColumnCount
NumRow = swBOMAnnotatie.RowCount

Voor I = 0 om te numrowen
Voor J = 0 TB NumCol
Sht. Cellen (I + 1, J + 1). Waarde = swBOMAnnotatie.Tekst(I, J)
Volgende J
Volgende I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, True, 0, Nothing, 0)
swModel.EditDelete

swModel.ForceRebuild3 Waar

Dim config As SldWorks.Configuration
Dim cusPropMgr As SldWorks.CustomPropertyManager
Dim lRetVal zo lang
Dim ValOut als snaar
Dim ResolvedValOut als tekenreeks
Dim wasOpgelost als Booleaanse
Dim nNbrProps zo lang
Dim vPropNames als variant
Dim vPropTypes als variant
Dim vPropValues als variant
Dim opgelost als variant
Dim custPropType zo lang
Dim K zo lang
Dim NameProperty als tekenreeks

Set config = swModel.GetActiveConfiguration
Stel cusPropMgr in = config. CustomPropertyManager

nNbrProps = cusPropMgr.Count
vPropNames = cusPropMgr.GetNames
Voor K = 0 Naar nNbrProps - 1
cusPropMgr.Get2 vPropNames(K), ValOut, ResolvedValOut
custPropType = cusPropMgr.GetType2(vPropNames(K))
Als vPropNames(K) = "CARTOONIST" Dan
PropertyName = OpgelostValOut
Einde als
Volgende K

Dim pad als snaar
path = "C:\temp\BOS.xlsx"

Met xlApp
wbk. Pad OpslaanAls
wbk. Sluiten
. Verlaten
Eindigen met

Einde Sub


invoegen-bom-asm_-_03.swp

 Hallo dlebrun_1,

Het is duidelijk dat je code twee grote blokken heeft.

De eerste (regels 22 tot en met 53) creëert de nomenclatuur voor een bepaalde configuratie; onder Excel zelf. De tweede (regels 55 t/m 100) krijgt de naam van de cartoonist in de actieve configuratie (maar doet er niets mee, wat eigenaardig is).

Het eerste blok gebruikt, in tegenstelling tot het tweede, niet de actieve configuratie, maar degene met de naam "Standaard". Dit is regel 49: Configuration = "Default". Het is dan beter om de variabele "Configuratie", die de naam van de configuratie bevat, te definiëren door het configuratieobject aan te roepen. Ik stel dan voor dat u deze regel vervangt door het voorbeeld van de volgende methode te nemen (link naar de helppagina van Solidworks 2019):

Sub essai_8946585465656()
    
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim Configuration As String
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    Configuration = swApp.GetActiveConfigurationName(swModel.GetPathName)
    MsgBox Configuration
    
End Sub

 

1 like

Hallo

"De tweede (regel 55 tot 100) krijgt de naam van de cartoonist in de actieve configuratie (maar doet er niets mee, wat eigenaardig is)": en ja, het is mooi!! Ik herken in deze code een deel van een macro die ik heb gemaakt naar aanleiding van een bepaald verzoek, maar die duidelijk uit de context is gehaald en herwerkt door iemand die niet echt begreep wat hij aan het doen was. Om aan de huidige behoefte te voldoen, is het mogelijk om een flink aantal rijen te verwijderen en het is inderdaad voldoende om vast te houden aan de actieve configuratie met behulp van de functie "GetActiveConfigurationName", zoals voorgesteld door mgauroy.

Vriendelijke groeten

1 like

Kanton Mgauroy 

Dank u voor uw hulp. Ik heb je advies opgevolgd, nu werkt alles.

D.Roger

Ik heb dit programma van het forum en ik heb het snel aangepast zonder het volledig te zuiveren. Helaas ben ik niet zo goed in VBA zoals je hebt gemerkt;) 

Hier is het resultaat na wijziging:

Optie Expliciete

Sub hoofd()

Dim xlApp als Excel.Application
Stel xlApp in = Nieuwe Excel.Toepassing
Dim wbk als Excel.Workbook
Dim sht als Excel.Werkblad

Met xlApp
    . Zichtbaar = Waar
    Stel wbk in = . Werkmappen.Toevoegen
    Stel sht in = wbk. Actief blad
Eindigen met

Dim swApp                   als SldWorks.SldWorks
Dim swModel                 als SldWorks.ModelDoc2
Dim swModelDocExt           als SldWorks.ModelDocExtension
Dim swBOMAnnotatie         als SldWorks.BomTableAnnotation
Dim swBOMFeature            As SldWorks.BomFeature
Dim boolstatus              als Booleaanse
Dim BomType                 zo lang
Dim configuratie           als tekenreeks
Dim TemplateName            als tekenreeks

Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
Stel swModelDocExt = swModel.Extension in

TemplateName = "M:\DATABASE\TEMPLATES\05-Model van nomenclatuur\GP_ASM_Nomenclature BOS.sldbomtbt"
BomType = swBomType_Indented
Configuratie = swApp.GetActiveConfigurationName(swModel.GetPathName)
MsgBox-configuratie
Stel swBOMAnnotatie in = swModelDocExt.InsertBomTable3(TemplateName, 0, 0, BomType, Configuratie, False, swNumberingType_Detailed, True)
Stel swBOMFeature = swBOMAnnotation.BomFeature in

swModel.ForceRebuild3 Waar

Dim NumCol zo lang
Dim NumRow zo lang
Dim ik zo lang
Zon J Zo lang

NumCol = swBOMAnnotatie.ColumnCount
NumRow = swBOMAnnotatie.RowCount

Voor I = 0 om te numrowen
    Voor J = 0 TB NumCol
        Sht. Cellen (I + 1, J + 1). Waarde = swBOMAnnotatie.Tekst(I, J)
    Volgende J
Volgende I

boolstatus = swModelDocExt.SelectByID2(swBOMFeature.GetFeature.Description, "BOMFEATURE", 0, 0, 0, True, 0, Nothing, 0)
swModel.EditDelete

Dim pad als snaar
path = "C:\temp\BOS.xlsx"

Met xlApp
    wbk. Pad OpslaanAls
    wbk. Sluiten
    . Verlaten
Eindigen met

Einde Sub

1 like

Hallo

Ik zou ook geïnteresseerd zijn in het ontdekken van de mogelijkheden van deze macro, maar ik zit vast aan de 1e regel: "type gedefinieerd, niet gedefinieerd".

Deze macro kan worden gestart vanuit SolidWorks, niet vanuit Excel 365.

Bedankt voor je feedback, nog een fijne dag


pb_macro.png

Open uw macro met de editor en controleer of u de Microsoft Excel-referentie hebt toegevoegd in het menu References Tool:

 

En ook is het over het algemeen beter om een nieuw onderwerp te openen met de link dan een oud onderwerp op te graven

2 likes

Heel erg bedankt, het werkt! Ik zal in staat zijn om te zien wat er mee gedaan kan worden in SW of Excel.

Het leek mij dat mijn vraag in de continuïteit van het onderwerp lag, en daarom heb ik geen nieuw onderwerp op zichzelf geopend.

Nogmaals bedankt

1 like

Hallo, ik heb de macro geprobeerd, maar ik krijg foutmeldingen.

Hoe deze macro in solidworks te introduceren, zijn er wijzigingen aan te brengen,

Bedankt voor je hulp

Hallo

Wat voor soort fouten? Een screenshot van de berichten zou niet slecht zijn ...

Een duidelijke wijziging die u moet aanbrengen, is het wijzigen van het pad van de stuklijstsjabloon (TemplateName)

Vriendelijke groeten

2 likes

Hallo allemaal, ik kom 2/3 jaar later weet ik :grin:
Ik zit bijna in dezelfde situatie, dus deze Q&A heeft me goed gediend!

Een kleine eigenaardigheid van mijn probleem is dat ik ook veel aangepaste eigenschappen moet exporteren, zoals de naam van de ingenieur, het onderdeelnummer of het plannummer...
Als ik het goed begrepen heb hangt het af van het sjabloon dat wordt aangeroepen, dus hoe pas je zo'n sjabloon aan? Of is er een andere manier om het te doen?

Bij voorbaat dank

Het VBA-programma roept een SolidWorks BOM-sjabloonbestand aan. Pas deze sjabloon aan met de informatie die u eraan wilt toevoegen.

2 likes

Het werkt bedankt, maar het probleem is dat ik niet weet hoe ik zo'n bestand (.sldbomtbt) moet wijzigen. Zou je weten hoe je het moet doen?

Hallo
Bewerk gewoon een tabel door de gewenste kolommen toe te voegen, klik vervolgens op het kruisje dat verschijnt om de tabel te verplaatsen en selecteer vervolgens Opslaan als.
Standaard wordt het opgeslagen als een stuklijstsjabloon.

2 likes

Heel erg bedankt, alles werkt zoals ik het wilde!

Hallo

Met betrekking tot uw belangrijkste behoefte om uw stuklijsten naar Excel te exporteren, hebben we een tool ontwikkeld die is geïntegreerd in SOLIDWORKS waarmee u een stuklijst kunt maken op basis van een assemblage of een map en de eigenschappen als extractiefilter kunt gebruiken, het extractieniveau van de subassemblages kunt kiezen en verschillende eigenschappen in een kolom kunt samenvoegen.

Het is ook mogelijk om de export aan te passen in tekst-, Excel-, SOLIDWORKS-tabel-, PDF- of XML-formaten.

Deze tool is SmartBom: SmartBom

Vriendelijke groeten

Hallo

Ik heb geprobeerd deze macro te zien.

De macro werkt als ik hem start vanuit een assemblage, maar niet vanuit een tekening.
Dit kan zijn normale werking zijn.

Het zou mogelijk zijn om een variant van deze te hebben om de stuklijst op te halen die op een tekening staat (ik voeg gegevens toe in een kolom van mijn stuklijst en het is praktischer op de MEP dan in de assemblage)??

Zou het ook mogelijk zijn om het Excel-bestand te maken van een bestaand sjabloon en het onder een andere naam op te slaan? (om andere reeds bestaande bladen in de Excel te hebben en daar mogelijk ook andere macro's te plaatsen)

Bij voorbaat dank

Hallo
Ik denk dat alles te doen is, ik hoef alleen maar SW- en Excel-code te compileren.
Ik denk dat ik dit soort vragen al heb beantwoord over een ander onderwerp, ik zou wat onderzoek moeten doen.