VBA-Code-Fehler mit Makrorecorder

Hallo an alle

Ich habe einen Code mit dem Makrorekorder in SOLIDWORKS 2018 erstellt und wenn ich ihn starte, erhalte ich die Fehlermeldung "Objektvariable oder Blockvariable mit nicht definiert"

Hier ist der 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

 

Der Fehler befindet sich in der Zeile:

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

Und ich verstehe nicht warum, weil ich das Makro mit der gleichen Datei erstellt habe, die ich verwende, also sollte es funktionieren.

Vielen Dank im Voraus für Ihre Antworten

Der Fehler kommt daher, dass die Ansicht nicht ausgewählt ist.

Wenn Sie eine Ansicht manuell auswählen, bevor Sie das Makro starten, sollte es funktionieren.

Andernfalls fügen Sie einen Code hinzu, um dies automatisch zu tun. Zum Beispiel:

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 „Gefällt mir“

Vielen Dank JeromeP,

Ich bin das VBA in SOLIDWORKS nicht gewohnt und so bin ich schnell verloren.

Können Sie mir sagen, wie (oder geben Sie mir einen Hinweis), wie ich diese Nomenklatur in csv oder xls exportieren kann?

Da der Makrorecorder die Dateibezeichnungen und den Dateityp nicht speichert, habe ich keinen grundlegenden Befehl.

Es muss durch ein " SaveAs Filename:=" und FileFormat:=xlCSV gehen, weil es immer noch VBA ist, aber für mich verwende ich es in Excel, also muss es Variationen geben.

1 „Gefällt mir“

Es gibt mehrere Möglichkeiten, dies zu tun. Zum Beispiel:

Fügen Sie diese Zeile am Ende des vorherigen Codes hinzu:

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

Sowie die Funktion:

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

Adaptiert von https://www.codestack.net/solidworks-api/document/tables/export-table-csv/

Ok, danke für deine Antwort, JeromeP

Ich werde es mir genau ansehen

Auf der anderen Seite, wo haben Sie gelernt , VBA für SOLIDWORKS zu programmieren, und wie haben Sie es gelernt?

Sind Sie Entwickler oder SolidWorks Anwender?

Im Grunde bin ich ein SW-Benutzer und habe gelernt, indem ich den Code geändert habe, der vom Makrorecorder erzeugt wurde , :)

Jetzt mache ich mehr Entwicklung. Übrigens, wenn Sie einen komplizierteren Code entwickeln müssen, lassen Sie es mich wissen.

1 „Gefällt mir“