Błąd kodu VBA z rejestratorem makr

Witam wszystkich,

Utworzyłem kod za pomocą rejestratora makr w solidworks 2018 i po jego uruchomieniu pojawia się błąd "Zmienna obiektu lub zmienna blokowa z niezdefiniowaną "

Oto kod

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

 

Błąd znajduje się w wierszu:

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

I nie rozumiem dlaczego, ponieważ stworzyłem makro z tego samego pliku, którego używam, więc powinno działać.

Z góry dziękuję za odpowiedzi

Błąd wynika z faktu, że widok nie jest wybrany.

Jeśli ręcznie wybierzesz widok przed uruchomieniem makra, powinno ono działać.

W przeciwnym razie dodaj kod, aby zrobić to automatycznie. Lubię co:

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 polubienie

Wielkie dzięki JeromeP,

Nie jestem przyzwyczajony do vba w solidworks , więc szybko się gubię.

Czy możesz mi powiedzieć, jak (lub dać mi trop) wyeksportować tę nomenklaturę w csv lub xls.

Ponieważ rejestrator makr nie zapisuje nazwy plików i typu pliku, więc nie mam żadnego podstawowego polecenia.

Musi przejść przez " Zapisz jako Nazwa pliku:=" i FileFormat:=xlCSV, ponieważ nadal jest to vba, ale dla mnie używam go w Excelu, więc muszą być odmiany.

1 polubienie

Można to zrobić na kilka sposobów. Lubię co:

Dodaj ten wiersz na końcu poprzedniego kodu:

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

Oprócz funkcji:

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

Na podstawie https://www.codestack.net/solidworks-api/document/tables/export-table-csv/

Ok dziękuję za odpowiedź Hieronim P

Zamierzam przyjrzeć się temu z bliska

Z drugiej strony, gdzie nauczyłeś się kodować vba dla solidworks i jak się uczyłeś?

Jesteś programistą lub użytkownikiem solidworks?

Zasadniczo jestem użytkownikiem oprogramowania i uczyłem się , modyfikując kod utworzony przez rejestrator makr :)

Teraz zajmuję się bardziej programowaniem. Przy okazji, jeśli potrzebujesz opracować bardziej skomplikowany kod , daj mi znać.

1 polubienie