Erreur de code vba avec enregistreur de macro

Bonjour a tous,

J'ai fait un code avec l'enregistreur de macro sous solidworks 2018 et quand je le lance j'ai une erreur "Variable objet ou variable de bloc with non définie"

Voici le 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

 

L'erreur se situe a la ligne:

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")

et je ne comprends pas pourquoi parce que j'ai créer la macro avec le même fichier que j'utilise, donc il devrait fonctionner.

Merci d'avance pour vos réponses

L'erreur viens du fait que la vue n'est pas sélectionnée.

Si tu sélectionne manuellement une vue avant de lancer la macro ca devrait fonctionner.

Sinon rajoute un code pour le faire automatiquement. Par exemple:

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 « J'aime »

Un grand merci JeromeP,

Je ne suis pas habitué au vba sous solidworks et donc je suis vite perdu.

Peux tu me dire comment (ou me donner une piste ) exporter cette nomenclature en csv ou xls.

Car l'enregistreur de macro n'enregistre pas le nommage du fichier et le chois du type de fichier, donc je n'ai aucune commande de base.

Ca doit passer par un" SaveAs Filename:= " et FileFormat:=xlCSV, parceque ca reste du vba mais pour moi je l'utilise sous excel donc il doit y avoir des variations.

1 « J'aime »

Il y a plusieurs façon de faire ca. Par exemple:

Rajoute cette ligne à la fin du code précédent:

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

Ainsi que la fonction:

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

Adapté de https://www.codestack.net/solidworks-api/document/tables/export-table-csv/

Ok merci de ta réponse JeromeP

Je vais regarder ça de près

Par contre d'ou tu as appris à coder du vba pour solidworks et commet tu as appris?

Tu es développeur ou utilisateur de solidworks?

A la base je suis utilisateur SW et j'ai appris en modifiant le code produit par l'enregistreur de macro :)

Maintenant je fais plus du développement. D'ailleurs si tu as besoin de développer un code plus compliqué, fais moi signe.

1 « J'aime »