ソリッドワークスはVBAが使える。
VBAはExcelで使ったことがあるのでなんとなくわかるがSolidWorksのオブジェクトの使い方を探さないといけない。使い方よりサンプルだ。
これ、相当以前からやりたかっがやっとできた。
あるフォルダにある全図をPDFにできるようになった。うれしい。
で、
何をしてできたのかというと、googleしたのだが、
・マクロの操作を保存する方法
・ソリッドワークスのライブラリのヘルプ場所、サンプル探し
・ファイル一覧の方法
思い出せないので随時。
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
Part.ViewZoomtofit2
longstatus = Part.SaveAs3(“C:\Users\tanaka\Desktop\図面1\maru1.PDF”, 0, 0)
End Sub
ss = Left(ss, Len(ss) – Len(kk(UBound(kk))) – 1)
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
Part.ViewZoomtofit2
ss = Part.GetPathName ‘今呼び込んでいる図面のパス名+ファイル名をssに入れる
‘.文字で区切って、各文字列を配列に入れる。kkは配列になる。UBound(kk)で配列の個数
kk = Split(ss, “.”)
ss = Left(ss, Len(ss) – Len(kk(UBound(kk))) – 1)
‘ssの確認。イミディエイトのウィンドウにssのデータが書かれる。イミディエイトが見えない場合は、Ctrl+d
Debug.Print ss
jj = Split(ss, “\”) ‘\文字で区切って、各文字列を配列に入れる。
‘ファイル名の取り出し。最後の配列のデータをfnameに入れる。jj(0)が先頭のデータ。
fname = jj(UBound(jj))
Debug.Print fname
Debug.Print pname
nn = Dir(pname)’1つ目のファイル名を取り出す。nnにファイル名が入る
Do Until nn = “” ‘Dir()は全ファイルを取り出し終えたら””を返す
If InStr(nn, “.SLDDRW”) Then ‘ファイル名に.SLDDRWを含む場合
Debug.Print TypeName(nn), nn ‘TypeName関数はカッコ内のデータの型を返す
‘open_savePDF sub/サブルーチンを呼び出す。サブルーチンにパス名+ファイル名を渡す
open_savePDF pname & nn ‘open_savePDFは自作のサブルーチン(関数のようなもの)
nn = Dir()’次のファイル名を取り出す。
Loop
End Sub
‘引数はパス名+ファイル名を受け取る。これは自作サブルーチン。ほとんどがマクロ記憶で
Sub open_savePDF(pf)
Set swApp = _
Application.SldWorks
Set Part = swApp.ActiveDoc
‘受け取ったpfパス名+ファイル名で開く
Set Part = swApp.OpenDoc6(pf, 3, 0, “”, longstatus, longwarnings)
Set Part = swApp.ActiveDoc
Dim myModelView As Object
Set myModelView = Part.ActiveView
myModelView.FrameLeft = 0
myModelView.FrameTop = 21
Set myModelView = Part.ActiveView
myModelView.FrameState = swWindowState_e.swWindowMaximized
‘ swApp.ActivateDoc2 “maru3.kotae – シート1”, False, longstatus
ss = Part.GetPathName ‘今呼び込んでいる図面のパス名+ファイル名をssに入れる
‘.文字で区切って、各文字列を配列に入れる。kkは配列になる。UBound(kk)で配列の個数
kk = Split(ss, “.”)
‘拡張子を取り外し。パス+ファイル名(拡張子なし)がssに入る
ss = Left(ss, Len(ss) – Len(kk(UBound(kk))) – 1)
longstatus = Part.SaveAs3(ss & “.PDF”, 0, 0)
Set Part = swApp.ActiveDoc
Set Part = Nothing
swApp.CloseDoc pf ‘パス名でも終了指定できる
End Sub
https://forum.solidworks.com/thread/33487