CADをVBAで自動化してみよう:印刷編

実はAutoCADやBricsCADなどはVBAが使えます。あら素敵!

Sub Oscar2() '印刷
'オスカル・フランソワ・ド・ジャルジェ(Oscar Francois de Jarjayes17551225日 - 1789714日)は、池田理代子著の漫画『ベルサイユのばら』に登場する架空の人物で、マリー・アントワネットと並ぶもう一人の同作品の主人公。『ベルばらKids』にも登場している
Dim ObjDoc1 As AcadDocument
Dim FileBuf As String
Dim AASX(9999, 2)
Dim styleSheetName As String

'フォルダ選択
Set objShell = CreateObject("shell.application")
Set objFolder = objShell.BrowseForFolder(0, "フォルダを選択", &H1 + &H10)
    If objFolder Is Nothing Then
        GoTo END_Path
    Else
        SelectSaveFolder = objFolder.Items.Item.Path
    End If
    
Kill "C:test.dsd"
'テキストファイル作成
'ファイルを書き込みで開く(無ければ新規作成される、あれば上書き)
'使用可能なファイル番号を取得
fileNo = FreeFile
Open "C:test.dsd" For Append As #fileNo
Print #fileNo, "[DWF6Version]"
Print #fileNo, "Ver=1"
Print #fileNo, "MinorVer=1"
    '指定フォルダのファイルを名前順で読み込み
    FileBuf = Dir(SelectSaveFolder & "\" & "*.dwg")
    cnt = 0
        Do While FileBuf <> ""
            AASX(cnt, 0) = FileBuf
            AASX(cnt, 1) = SelectSaveFolder & "\" & FileBuf
            AASX(cnt, 2) = Replace(FileBuf, ".dwg", "")
                Print #fileNo, "[DWF6Sheet:" & AASX(cnt, 2) & "-Model]"
                Print #fileNo, "DWG=" & AASX(cnt, 1)
                Print #fileNo, "Layout=Model"
                Print #fileNo, "Setup=セットアップ1|C:印刷スタイル.dwg"
                Print #fileNo, "OriginalSheetPath=" & AASX(cnt, 1)
            FileBuf = Dir()
            cnt = cnt + 1
        Loop
Print #fileNo, "[Target]"
Print #fileNo, "Type=2"
Print #fileNo, "DWF=C:"
Print #fileNo, "OUT=C:"
Print #fileNo, "LocationType=2"
Print #fileNo, "[SheetSet Properties]"
Print #fileNo, "NoOfCopies=1"
Print #fileNo, "PlotStampOn=FALSE"
Print #fileNo, "PromptForDwfName=TRUE"
Print #fileNo, "GenerateDwfName=FALSE"
Print #fileNo, "IncludeLayer=FALSE"
Print #fileNo, "[PdfOptions]"
Print #fileNo, "ConvertTextToGeometry=FALSE"
Print #fileNo, "LineMerge=FALSE"
Print #fileNo, "EmbedTtf=TRUE"
Print #fileNo, "ImageAntiAliasing=TRUE"
Print #fileNo, "JPEGImageCompression=TRUE"
Print #fileNo, "ExportHyperlinks=TRUE"
Print #fileNo, "VectorResolution=2400"
Print #fileNo, "RasterResolution=300"
Print #fileNo, "PdfA = 0"

'開いたファイルを閉じる
Close #fileNo

'シートセットを開いて印刷
ThisDrawing.SendCommand "filedia" & vbCr & "0" & vbCr
ThisDrawing.SendCommand "PUBLISHCOLLATE" & vbCr & "1" & vbCr
ThisDrawing.SendCommand ".-publish" & vbCr & "C:test.dsd" & vbCr

END_Path:
ThisDrawing.SendCommand "filedia" & vbCr & "1" & vbCr
End Sub

VBAを使ってフォルダ内のdwgファイルすべてを一発でPDFにパブリッシュしてくれます。あら素敵!
上記コードはBricsCAD環境で使ってます。AutoCADと何が変わるかは知らんです。

※変数の定義を厳密にやってないのは筆者がスクリプト言語寄りの人間だからです。文句言う人はおしりペンペンします。

印刷スタイル.dwg:パブリッシュの印刷設定が入ってるCADファイルです。ご自分で好きなように作ってください。
test.dsd:パブリッシュ設定を保存したときに生成されるファイルです。中身はただのtxtなので、どの項目がどの意味か簡単なリバースエンジニアリングをして、VBAで生成するようにしました。

印刷設定は印刷スタイルdwgに依存するのでお好きなように作りこんでね。


この記事が参加している募集

仕事のコツ

with 日本経済新聞

この記事が気に入ったらサポートをしてみませんか?