VBA-codefout met macrorecorder

Hallo allemaal,

Ik heb een code gemaakt met de macrorecorder in solidworks 2018 en wanneer ik deze start, krijg ik een foutmelding "Objectvariabele of blokvariabele met niet gedefinieerd"

Hier is de code

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
Dim swActiveView As Object
Set swActiveView = Part.ActiveDrawingView
Dim swBOMTable As Object
Set swBOMTable = swActiveView.InsertBomTable2(False, 1.96979560481769E-02, 0.287303519163763, swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, swBomType_e.swBomType_TopLevelOnly, "", "C:\Program Files\SolidWorks Corp\SolidWorks\lang\french\bom-standard.sldbomtbt")
boolstatus = Part.EditRebuild3()
boolstatus = Part.Extension.SelectByID2("Objet de détail2@Feuille1", "ANNOTATIONTABLES", 4.85493846196055E-02, 0.280618432055749, 0, False, 0, Nothing, 0)
boolstatus = Part.Extension.SelectByID2("Objet de détail2@Feuille1", "ANNOTATIONTABLES", 5.24196982084557E-02, 0.252470696864111, 0, False, 0, Nothing, 0)
End Sub

 

De fout zit hem op de volgende regel:

Set swBOMTable = swActiveView.InsertBomTable2(False, 1.96979560481769E-02, 0.287303519163763, swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft, swBomType_e.swBomType_TopLevelOnly, "", "C:\Program Files\SolidWorks Corp\SolidWorks\lang\french\bom-standard.sldbomtbt")

En ik begrijp niet waarom, want ik heb de macro gemaakt met hetzelfde bestand dat ik gebruik, dus het zou moeten werken.

Bij voorbaat dank voor uw antwoorden

De fout komt voort uit het feit dat de weergave niet is geselecteerd.

Als u handmatig een weergave selecteert voordat u de macro start, zou deze moeten werken.

Voeg anders een code toe om het automatisch te doen. Zoals wat:

Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swDraw As SldWorks.DrawingDoc
    Dim swActiveView As SldWorks.View
    Dim swBOMTable As SldWorks.BomTableAnnotation
    Dim Config As String
    Dim TemplateName As String
    Dim BomType As Long
    Dim AnchorType As Long

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swDraw = swModel
    Set swActiveView = swDraw.GetFirstView
    Set swActiveView = swActiveView.GetNextView
    swModel.Extension.SelectByID2 swActiveView.Name, "DRAWINGVIEW", 0, 0, 0, False, 0, Nothing, 0

    Config = swActiveView.ReferencedConfiguration
    TemplateName = "C:\Program Files\SolidWorks Corp\SolidWorks\lang\french\bom-standard.sldbomtbt"
    BomType = swBomType_e.swBomType_TopLevelOnly
    AnchorType = swBOMConfigurationAnchorType_e.swBOMConfigurationAnchor_TopLeft

    Set swBOMTable = swActiveView.InsertBomTable2(False, 0, 0.287, AnchorType, BomType, Config, TemplateName)
End Sub

 

1 like

Hartelijk dank JeromeP,

Ik ben de vba niet gewend in solidworks en dus ben ik snel de weg kwijt.

Kunt u mij vertellen hoe (of geef mij een aanwijzing) om deze nomenclatuur te exporteren in csv of xls.

Omdat de macrorecorder de bestandsnaamgeving en het bestandstype niet opslaat, heb ik geen basiscommando.

Het moet gaan via een " SaveAs Filename:=" en FileFormat:=xlCSV, want het is nog steeds vba, maar voor mij gebruik ik het in Excel, dus er moeten variaties zijn.

1 like

Er zijn verschillende manieren om dit te doen. Zoals wat:

Voeg deze regel toe aan het einde van de vorige code:

WriteCsv "C:\Temp\myFile.csv", swBOMTable

Evenals de functie:

Sub WriteCsv(filePath As String, table As SldWorks.TableAnnotation)
    Dim fileNmb As Integer
    fileNmb = FreeFile
    Open filePath For Output As #fileNmb
    Dim i As Integer
    Dim j As Integer
    Dim row As String
    Dim cell As String
    For i = 0 To table.RowCount - 1
        row = ""
        For j = 0 To table.ColumnCount - 1
            cell = table.Text(i, j)
            If InStr(cell, ",") > 0 Or InStr(cell, vbLf) > 0 Or InStr(cell, vbNewLine) > 0 Then cell = """" & cell & """"
            row = row & IIf(j = 0, "", ",") & cell
        Next
        Print #fileNmb, row
    Next
    Close #fileNmb
End Sub

Aangepast van https://www.codestack.net/solidworks-api/document/tables/export-table-csv/

Ok bedankt voor je antwoord JeromeP

Ik ga er goed naar kijken

Aan de andere kant, waar heb je vba leren coderen voor solidworks en hoe heb je dat geleerd?

Bent u een ontwikkelaar of een solidworks-gebruiker?

Kortom, ik ben een SW-gebruiker en ik heb geleerd door de code van de macrorecorder te wijzigen :)

Nu doe ik meer ontwikkeling. Trouwens, als je een meer gecompliceerde code moet ontwikkelen, laat het me weten.

1 like