SolidWorks 2013 Macro - манипулирование строками?

SolidWorks использует VBA для своих макросов, но он сильно отличается от Excel VBA (к чему я привык). Они сделали очень трудным (и вполне возможно невозможным) манипулирование строками в SW. Я пытался использовать функцию Left() и функцию Mid(), но я не могу понять, как заставить это работать. В основном, что мне нужно, это сохранить файл в формате.DXF и назвать его заголовком, но БЕЗ имени листа. Название листа вызывает проблему, и я пытаюсь его вырезать. я могу использовать

Part.GetTitle

чтобы получить строку заголовка, которая, например, что-то вроде

PA0000 - Sheet1

и я просто хочу, чтобы это было

PA0000

Иногда длина отличается, поэтому я попытался использовать

Left(Part.GetTitle,Instr(Part.GetTitle, " ")-1)

но это дает ошибку несоответствия типов. Что я делаю неправильно? Все, что осталось для этого макроса, это вырезать " - Sheet1".

2 ответа

Я внес некоторые изменения в код на help.solidworks.com; это должно работать для вас. Просто измените папки по мере необходимости.

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long
'http://help.solidworks.com/2012/English/api/sldworksapi/Save_File_As_PDF_Example_VB.htm
Sub main()
    Dim swApp                       As SldWorks.SldWorks
    Dim swModel                     As SldWorks.DrawingDoc
    Dim swPart                      As SldWorks.PartDoc
    Dim bRet                        As Boolean
    Dim MyPath                      As String
    Dim MyFolder                    As String
    Dim longstatus                  As Long
    Dim filename                    As String
    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

    MyFolder = "C:\temp" ' Change to temp drive since curdir is often write protected.
    myFile = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, ".") - 1)
    myFile = Right(myFile, Len(myFile) - InStrRev(myFile, "\"))
    MyPath = Left(swModel.GetPathName, InStrRev(swModel.GetPathName, "\") - 1)
    MyPath = Right(MyPath, Len(MyPath) - InStrRev(MyPath, "\"))

    Debug.Print "FileName = " & myFile
    Debug.Print "File = " & swModel.GetPathName
    Debug.Print "Folder = " & MyPath
    Debug.Print "Current Folder = " & CurDir$
    Debug.Print (MyFolder & "\" & myFile & ".DXF")
    filename = MyFolder & "\" & myFile & ".DXF"
    longstatus = swModel.SaveAs3(filename, 0, 0)
    ' For PDF Generation
    ' longstatus = swModel.SaveAs3(MyFolder & "\" & myFile & ".PDF", 0, 0) 
End Sub

длинное имя = Лен(Part.GetTitle) - 9

' Сохранить как longstatus = Part.SaveAs3(Left(Part.GetTitle, длинное имя) + ".SLDDRW", 0, 2)

поэтому полный код:

      Dim swApp As Object
Dim longname As Long
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
longname = Len(Part.GetTitle) - 9

' Save As
longstatus = Part.SaveAs3(Left(Part.GetTitle, longname) + ".SLDDRW", 0, 2)
boolstatus = Part.FeatureManager.EditRollback(swMoveRollbackBarTo_e.swMoveRollbackBarToEnd, "")
Part.ClearSelection2 True

' Save As
longstatus = Part.SaveAs3(Left(Part.GetTitle, longname) + ".PDF", 0, 0)
End Sub
Другие вопросы по тегам