Solidworks 2019 - Macro om automatisch een macro naar Excel te exporteren

Hallo

Ik heb een macro gebruikt die door een andere gebruiker is gepost.

Ik heb snel een bug en ik geef toe dat ik geen macrospecialist ben. Het programma crasht met een Run-Tume-fout 91 (objectvariabele met blokvariabele niet ingesteld) in de Set-instructie swBOMFeature = swBOMAnnotation.BomFeature vetgedrukt

Kunt u mij vertellen waar ik de fout in ga en hoe ik mijn probleem kan oplossen?

Bij voorbaat dank

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
Dim TableTemplate als tekenreeks

Stel swApp = Toepassing.SldWorks in

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


TemplateName = "C:\Gebruikers\sal1chl\Desktop\test_nomenclature.sldbomtbt"

BomType = swBomType_TopLevelOnly

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

Stel cusPropMgr in = swModelDocExt.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 = Over ("GEBRUIKERSPROFIEL") & "\Desktop\" & swModel.GetTitle & "-" & PropertyName & ".xls"

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

Einde Sub

Hallo

Ik denk dat je ofwel je Configuration variabele moet initialiseren voordat je je BOM invoegt met bijvoorbeeld Configuration = "" of  Configuration vervangen door "" in de regel Set swBOMAnnotation = swModelDocExt.InsertBomTable3(TemplateName, 0, 0, BomType, Configuration, False, swNumberingType_Detailed, True).

Vriendelijke groeten

1 like

dank je wel Roger voor je antwoord.

Ik realiseer me dat ik de regel niet had gekopieerd die zei:

Configuratie = "Standaard"

Voor meer flexibiliteit heb ik deze regel veranderd in 

Configuratie = swApp.GetActiveConfigurationName(sFileName)

door vooraf goed te hebben

Const sFileName                 As String = "test. SLDPRT"

Mijn probleem doet zich altijd voor bij:

Stel swBOMFeature = swBOMAnnotation.BomFeature in

waar swBOMFeature = Niets

Ter info op de vorige regel, ik heb ook swBOMAnnotation=Nothing

Is dit normaal?

Bedankt voor je hulp

 

Hallo

Eerste punt: U moet eerst controleren of de TemplateName = "C:\Users\sal1chl\Desktop\test_nomenclature.sldbomtbt" correct is geschreven, want als dit niet het geval is, blokkeert het op de regel Set swBOMFeature = swBOMAnnotation.BomFeature.

Tweede punt: Als u de macro gebruikt op een onderdeel ("test. SLDPRT") dan kan het BomType niet "swBomType_TopLevelOnly" zijn  en dan loopt het vast op de regel Set swBOMFeature = swBOMAnnotation.BomFeature, verander het in "swBomType_Indented" om te controleren of het daar vandaan komt. Vreemd om een nomenclatuur op een onderdeel te willen zetten!

Vriendelijke groeten

1 like

Hallo Roger,

Hartelijk dank, het werkt!

Weet u hoe u automatisch de naam kunt ophalen van de assembly waarin ik deze macro uitvoer?

Voorlopig geef ik het de naam in de macro

Const sFileName                 As String = "test_assemblage. SLDASME"

Bedankt

 

Vriendelijke groeten

 

LSE

Zoiets als dit zou je de naam van het bestand moeten geven (toe te voegen onder je regel: Set swModel = swApp.ActiveDoc)

 

Dim sFileName als string

sFileName =swModel.GetPathName

Debug.print sFileName

PS: vergeet niet deze regel te verwijderen: Const sFileName                 As String="test_assemblage. SLDASM"  (of zet het in een commentaar)

1 like

Hallo Denis,

Mijn antwoord was niet verdwenen... sorry (ik hoefde niet "publiceren" te selecteren). Bedankt, het werkte prima.

En dan, ik weet niet wat ik heb gedaan, want niets werkt meer...

NumRow = swBOMAnnotation.RowCount  geeft 1 terwijl ik meerdere componenten heb... Mijn nomenclatuur wordt helemaal niet meer weergegeven...

Heb je een idee?

Ik voeg de macro aan je toe ...

Bedankt voor je hulp


invoegen-bom-asm.swp

Nog een kleine verduidelijking....

wanneer ik mijn stuklijst handmatig invoer, door te bellen 

TemplateName = "C:\Gebruikers\sal1chl\Desktop\test_assemblage2.sldbomtbt"
 

Geen zorgen, de tabel wordt weergegeven (1e niveau)

als ik het via de macro aanroep, heb ik alleen de 1e rij van de tabel met de namen van de kolommen....

Ik denk dat mijn fout daarin zit...

TemplateName = "C:\Gebruikers\sal1chl\Desktop\test_assemblage.sldbomtbt"
' Type stuklijst

BomType = swBomType_TopLevelOnly
'Totstandkoming van de stuklijsttabel

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 = swBOMAnnotation.ColumnCount              ' het geeft 5
NumRow = swBOMAnnotation.RowCount                  ' het geeft 0, vandaar het probleem....

Hallo

Ik heb mijn fout gevonden...

Ik had per ongeluk de regels SFileName en Configuration verwisseld.

 

sFileName = swModel.GetPathName '= weergavenaam van de assembly met het pad
Foutopsporing.Print sFileName

Configuratie = swApp.GetActiveConfigurationName(sFileName)

 

Probleem opgelost

Hartelijk dank aan jullie beiden voor jullie hulp

 

LSE