(第5回)AutoCAD Tips 作図編③

(第5回)AutoCAD Tips 作図編③

目次

はじめに
完成イメージ
VBAの内容
Excelシートの内容
実行結果
おわりに

はじめに

前回は作図編②として、キーボードでのコマンド入力についてご紹介しました。

(第4回)AutoCAD Tips 作図編②

今回は作図編③として、Excelのマクロを使って作図をする方法について説明いたします。

完成イメージ

完成イメージは下記の通りです。
1.Excelの表に実行したいコマンドや座標を入力する。
2.実行ボタンをクリックする。
3.自動で図面が表示される。

VBAの内容

それでは早速VBAの内容を紹介します。

まずは予めEnumを使って列番号を定義しておきました。

'列番号定義
Public Enum EnumC
    番号 = 1
    コマンド = 2
    ファイル名 = 3
    X1 = 4
    Y1 = 5
    X2 = 6
    Y2 = 7
    Y軸尺度 = 8
    X軸尺度 = 9
    角度 = 10
    半径 = 11
End Enum

そしてこちらが実際に実行したVBAコードです。

Sub DrawingAutomatically()

    'スクリプトファイルを作成
    test = "C:\Users\<ユーザー名>\Desktop\Fiessport\Test.scr" 
    Open test For Output As #1
    Print #1, "osnap non" 
    
    '****************************************
    
    For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
    
        If Cells(i, EnumC.コマンド) = "rectang" Then
            Print #1, Cells(i, EnumC.コマンド) & " " & Cells(i, EnumC.X1) & "," & Cells(i, EnumC.Y1) & " " & Cells(i, EnumC.X2) & "," & Cells(i, EnumC.Y2)
        End If
        
        If Cells(i, EnumC.コマンド) = "circle" Then
            Print #1, Cells(i, EnumC.コマンド) & " " & Cells(i, EnumC.X1) & "," & Cells(i, EnumC.Y1) & " " & Cells(i, EnumC.半径)
        End If
        
        If Cells(i, EnumC.コマンド) = "insert" Then
            Print #1, Cells(i, EnumC.コマンド) & " " & Cells(i, EnumC.ファイル名) & " " & Cells(i, EnumC.X1) & "," & Cells(i, EnumC.Y1) & " " & Cells(i, EnumC.Y軸尺度) & " " & Cells(i, EnumC.X軸尺度) & " " & Cells(i, EnumC.角度)
        End If
        
        If Cells(i, EnumC.コマンド) = "saveas" Then
            Print #1, "zoom e"
            Print #1, Cells(i, EnumC.コマンド) & " 2018 " & Cells(i, EnumC.ファイル名)
        End If
        
        If Cells(i, EnumC.コマンド) = "new" Then
            Print #1, Cells(i, EnumC.コマンド) & " ."
        End If

    Next i
    
    '****************************************
    
    Print #1, "zoom e"
    Print #1, "filedia 1"
    Close #1
    
    'CADをアクティベート
     AppActivate "Autodesk AutoCAD"
    
    'スクリプトを実行
    SendKeys "filedia 0" & Chr(13) & "script" & Chr(13) & test & Chr(13), True
End Sub

このマクロではAutoCADでスクリプトファイルを実行するようにしているため、まず最初にスクリプトファイルを作成します。
4行目でファイルパスを指定し、5行目の「Open test For Output As #1」でファイルの作成と書き込みを行います。

6行目から38行目は作成したスクリプトファイルにコマンドを書き込んでいく処理です。
6行目の“osnap non”でオブジェクトスナップをオフにしておきます。
オブジェクトスナップがオンになっていると指定したい座標と別の場所にスナップが効いてしまい、意図した位置に描画や挿入ができない場合があるためです。

10行目から33行目ではFor文を使ってExcelのシートに入力した内容を1行ずつ見ていきます。
例えば12行目の処理ではシートのコマンド列に「rectang」と入力されていた場合、長方形を描画する[RECTANG]コマンドをスクリプトに書き込むようになっています。
下記のようにコマンドや座標の間にスペースが必要になりますので忘れず記載してください。
rectang␣1点目のX座標,1点目のY座標␣2点目のX座標,2点目のY座標
※ ␣ は半角スペースを表現しています。

37行目の“zoom e”では作図領域にあるすべてのオブジェクトが画面全体に表示されるようにズームをしています。
38行目の“filedia 1”はダイアログボックスが表示される設定に変更するコマンドです。
[SCRIPT]コマンドを実行する際にダイアログボックスが表示されると処理が止まってしまうため、45行目でダイアログボックスが表示されない設定に変更してからスクリプトを実行します。
そのためスクリプトの最後にこの設定を戻す必要があるのです。
39行目でスクリプトファイルを閉じてスクリプトの作成は終了です。

42行目の「AppActivate “Autodesk AutoCAD”」でAutoCADをアクティブにします。
※AutoCAD事前に立ち上げて新規図面または既存の図面を開いてコマンドラインに入力できる状態にしておく必要があります。

最後にSendKeysで[SCRIPT]コマンドを実行します。
“filedia 0” & Chr(13) & “script” & Chr(13) & test & Chr(13)
“filedia 0” ⇒ダイアログボックス表示をオフ
Chr(13)  ⇒改行
test   ⇒4行目で設定したスクリプトのパス

Excelシートの内容

使用したExcelの表はこのようになっています。
図面を2つ作って、最後にその2つを組み合わせた図面を作成するようにしました。

実行結果

VBAコードと実行するコマンドのリストが用意できたのでいよいよマクロの実行です。

下図の通り図面を作成することができました!

エクスプローラーを確認するとこちらもきちんと3つの図面が保存されていました!

おわりに

スクリプトの作成はスペースやカンマが正しく入力されていないと途中で処理が止まってしまうため、最初は少し難しいかもしれません。
しかし、一度作ってしまえば同じブロックをたくさん挿入したい時などに業務の効率化が図れます。
ボタン一つで図面が出てくるのも楽しいのでぜひ挑戦してみてください!