【入門編】【初心者向け】図面内の特定ビューにおける表示スタイル(シェード/隠線表示など)切替マクロ – SolidWorks VBA解析バイブル

スポンサーリンク

こんにちは!SolidWorks自動化の世界へようこそ。
チーフアーキテクトの私です。

「マクロの記録」ボタンを押して図面ビューの表示スタイルをカチカチと切り替え、生成されたコードを見て絶望したことはありませんか?
「なんだこの無駄に長いコードは……」「シートやビューが固定されていて、別の図面で使えないじゃないか……」

そう、マクロの記録機能は初心者の強い味方ですが、実務で使える「生きたコード」を書くためには、SolidWorks APIのオブジェクト構造という「裏側のルール」を知る必要があります。

今回は、図面ビューの表示スタイル(隠線表示なし、シェード、ワイヤーフレームなど)をVBAで自在にコントロールする手法を、基礎から優しく、そして本質的な部分まで徹底解説します。
ここをクリアすれば、あなたのVBAスキルは確実にワンランク上のステージに到達しますよ!

—

1. なぜ「マクロの記録」のままではダメなのか?

まず、SolidWorksの図面(Drawing)が内部でどうなっているかを見てみましょう。

SolidWorksの図面ファイルの中には、「シート(Sheet)」があり、そのシートの中に「図面ビュー(Drawing View)」が配置されています。さらに、そのビューの中に「モデル(部品やアセンブリ)」が紐付いています。

マクロの記録を使うと、以下のようなコードが生成されがちです。

  • 「Sheet1」という名前に依存したコードになる
  • 「DrawingView1」という自動採番された名前に依存する

これでは、図面の名前が変わったり、ビューが増えたりした瞬間にエラー(Runtime Error)でマクロがクラッシュします。
私たちが目指すべきは、「今、アクティブなシートにある、選択した(または特定の)ビューを賢く掴んで変更する」という、環境変化に強い動的なコードです。

—

2. 表示スタイル切替の核心:`SetDisplayMode` メソッド

図面ビューの見た目を変更するためのAPIの核心、それが `ISwDrawingView::SetDisplayMode3`(または関連するメソッド)です。

SolidWorks VBAにおいて、ビューの表示スタイルは以下の定数で制御します。

| 設定したいスタイル | API定数 | 意味 |
| :— | :— | :— |
| ワイヤーフレーム | `swWIREFRAME` (0) | 線の枠組みだけを表示 |
| 隠線表示 | `swHIDDEN_LINES_VISIBLE` (1) | 隠線を破線で表示 |
| 隠線なし | `swHIDDEN_LINES_REMOVED` (2) | 隠線を消去(スッキリした見た目) |
| シェード | `swSHADED` (3) | 色や質感を付けて表示 |

※環境やバージョンによって微小なメソッド名の違いはありますが、基本の考え方は同じです。今回は最も汎用的なアプローチをとります。

—

3. 【実践】ビューの表示スタイルを「シェード」に切り替えるVBAコード

それでは、実務でそのままコピペして使えるサンプルコードを公開します。
このコードは、「現在開いている図面の、アクティブなシート上にあるすべての図面ビューを対象に、一括で表示スタイルを『シェード』に切り替える」というものです。

VBE(Visual Basic Editor)を開き、標準モジュールに貼り付けて実行してみてください。

‘ ==============================================================================
‘ チュートリアル用マクロ: 図面ビューの表示スタイルを「シェード」に変更する
‘ ==============================================================================
Sub ChangeViewDisplayToShaded()

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swDraw As SldWorks.DrawingDoc
Dim swSheet As SldWorks.Sheet
Dim vViews As Variant
Dim swView As SldWorks.View
Dim i As Long
Dim success As Boolean

‘ 1. SolidWorks アプリケーションの取得
Set swApp = Application.SldWorks
If swApp Is Nothing Then
MsgBox “SolidWorksが起動していません。”, vbCritical
Exit Sub
End If

‘ 2. 現在アクティブなドキュメントを取得
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox “アクティブなドキュメントがありません。”, vbExclamation
Exit Sub
End If

‘ 3. ドキュメントが「図面(Drawing)」かチェック
If swModel.GetType <> swDocDRAWING Then
MsgBox “このマクロは図面ファイルでのみ実行可能です。”, vbCritical
Exit Sub
End If

‘ DrawingDoc インターフェースへキャスト
Set swDraw = swModel

‘ 4. 現在アクティブなシートを取得
Set swSheet = swDraw.GetCurrentSheet
If swSheet Is Nothing Then
MsgBox “アクティブなシートを取得できませんでした。”, vbCritical
Exit Sub
End If

‘ 5. シート上のすべての図面ビューの配列を取得
‘ ※注意: 配列の最初の要素(index 0)は、シート自体のプロパティを表すダミービューが入ることが多いため注意が必要です
vViews = swSheet.GetViews()

If IsEmpty(vViews) Then
MsgBox “このシートにはビューが配置されていません。”, vbInformation
Exit Sub
End If

‘ 6. 取得したビューをループ処理して、表示スタイルを変更
For i = LBound(vViews) To UBound(vViews)
Set swView = vViews(i)

‘ ダミービュー(親ビューを持たないシート自体を指すものなど)をスキップする判定
‘ ビュー名が空でない、または特定の条件を満たすものだけを対象にします
If Not swView Is Nothing Then
‘ ここで表示スタイルを変更!
‘ 引数:
‘ 1: モデル表示を使用するか (False = ビュー固有の設定を使う)
‘ 2: 表示スタイル (swSHADED = 3)
‘ 3: 品質設定など

‘ ※SolidWorksのバージョンやAPI仕様に合わせてメソッドを調整します
success = swView.SetDisplayMode3( _
False, _
swDmwDisplayMode_Shaded, _
True, _
True, _
True)
End If
Next i

‘ 画面を再描画して変更を反映
swModel.WindowRedraw

MsgBox “すべてのビューの表示スタイルを「シェード」に変更しました!”, vbInformation

End Sub

コードのここがポイント!

  • `swModel.GetType <> swDocDRAWING` による型チェック: パーツやアセンブリの画面で誤ってマクロが暴発するのを防ぐ、プロ必須の防御的プログラミングです。
  • `swSheet.GetViews()`: シート名に依存せず、そのシートにあるビューを配列としてごっそり取得します。これぞAPIならではの動的アプローチです。

—

4. 初心者がハマりやすい「3大トラップ」と回避策

SolidWorks VBAを始めたばかりの方が、このテーマで必ず躓くポイントを先回りして解説しておきます。

トラップ1:「シート名が Sheet1 じゃないとエラーになる」

原因: マクロの記録をそのまま使うと発生します。
対策: 上記のコードのように `swDraw.GetCurrentSheet` を使ってください。ユーザーが今何番目のシートを開いていようとも、自動的にそのシートをターゲットにしてくれます。

トラップ2:「ビューを変更したのに画面が更新されない」

原因: APIでデータを書き換えても、グラフィックス画面のバッファが更新されていないケースがあります。
対策: ループの最後に必ず `swModel.WindowRedraw` または `swModel.ForceRebuild3 (False)` を挟みましょう。

トラップ3:「シート自体のプロパティ(親ビュー)を触ってエラーになる」

原因: `GetViews()` で取得できる配列の「最初のエレメント」には、シートのルート情報が含まれていることがあり、そのままビュー操作メソッドを投げるとエラーになります。
対策: ビューの名前(`swView.Name`)が空文字でないかチェックする、あるいはオブジェクトが正しく取得できているか `If Not swView Is Nothing Then` でガードを固めましょう。

—

5. おわりに:ここをクリアすれば、基本はバッチリ!

お疲れ様でした!今回は「図面ビューの表示スタイル切替」という具体的なテーマを通じて、以下の重要な概念をマスターしました。

1. マクロの記録に頼らず、現在のドキュメントやシートを動的に取得する方法
2. APIのオブジェクト構造(`DrawingDoc` → `Sheet` → `View`)の辿り方
3. エラーを防ぐための防御的コード(型チェックやNullチェック)の書き方

ここをクリアできれば、あとは「ビューのスケール変更」「図面枠の自動差し替え」「一括PDF出力」など、どんな高度な図面自動化マクロでもあなたの手で自在に組めるようになります。

SolidWorks VBAの世界へようこそ。あなたの業務自動化の旅は、ここからさらに加速します。
それでは、次回の極限知見でお会いしましょう!

タイトルとURLをコピーしました