3

SolidWorks はマクロに VBA を使用しますが、Excel VBA とは大きく異なります (これは私が慣れ親しんでいるものです)。彼らは、SW で文字列を操作することを非常に困難 (そしておそらく不可能) にしました。Left() 関数と Mid() 関数を使用してみましたが、機能させる方法がわかりません。基本的に必要なのは、名前を付けて保存する.DXFファイルで、タイトルを付けますが、シート名は付けません。シート名が問題を引き起こしているので、切り取ろうとしています。使うことができます

Part.GetTitle

たとえば、次のようなタイトルの文字列を取得するには

PA0000 - Sheet1

そして、私はそれが欲しいだけです

PA0000

たまに長さが違うので使ってみた

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

しかし、型の不一致エラーが発生します。私は何を間違っていますか?このマクロに残っているのは、" - Sheet1" を切り取ることだけです。

4

2 に答える 2

0

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
于 2015-07-14T19:25:15.857 に答える
0

longname = Len(Part.GetTitle) - 9

' 名前を付けて保存 longstatus = Part.SaveAs3(Left(Part.GetTitle, longname) + ".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
于 2021-01-20T15:17:22.173 に答える