状況
AutoCAD VBAに関する質問です。
「1つのdwgファイル内で、1つのモデルから複数のペーパー(レイアウト)があるDWGファイルを、1つのペーパーだけを持つファイルにそれぞれ別名保存する」ということをVBAで実現したいと思っています。
例えば、A.dwgというファイルが、「レイアウト1」から「レイアウト10」まで10個のレイアウトを持っているとして、
・「A-レイアウト1.dwg」を別名保存して、レイアウトは「レイアウト1」だけを残して、それ以外の9つのレイアウトは削除する
・「A-レイアウト2.dwg」を別名保存して、レイアウトは「レイアウト2」だけを残して、それ以外の9つのレイアウトは削除する
…
・「A-レイアウト10.dwg」を別名保存して、レイアウトは「レイアウト10」だけを残して、それ以外の9つのレイアウトは削除する
というように、10個全て別名保存したファイルを作るという作業を、自動化したいと思っています。
なお、実際にはこのようなdwgファイルが数百個あり、レイアウトの数は常に10と決まっているわけではなく、ファイルによって異なります。
そこで、作業の時短とミス防止を目的に、以下のようなコードをAutoCAD VBAで書いたのですが、後述するエラーが起こっています。
該当のソースコード
VBA
1Public Sub test1() 2 Dim i As Long, j As Long 3 Dim FileName As String 4 Dim PaperCount As Long 5 Dim PaperName() As String 6 Dim ModelPaperN As Long 7 Dim Path As String, FullFileName As String 8 Dim 残すレイアウト名 As String 9 Dim DWG1 10 Dim Paper1 As AcadLayout 11 12 Set DWG1 = ActiveDocument 13 14 FileName = DWG1.Name 15 Path = DWG1.Path '図面の保存パス 16 FullFileName = Path & "\" & FileName 17 18 FileName = Replace(FileName, ".dwg", "") 19 FileName = Replace(FileName, ".DWG", "") 20 'ファイル名を取得してから、拡張子を除去したファイル名を取得 21 22 PaperCount = DWG1.Layouts.Count - 1 'レイアウトの総数を数え上げる。「モデル」も数えられるのでレイアウト数+1になるから、1を引く 23 24 ReDim PaperName(PaperCount) As String 25 26 For i = 0 To PaperCount 27 PaperName(i) = DWG1.Layouts(i).Name 28 Debug.Print (i & " " & PaperName(i)) 29 Next 30 31 For i = 0 To PaperCount 32 If i > 0 Then 33 Application.Documents.Open (FullFileName) 34 Set DWG1 = ActiveDocument 35 End If 36 37 PaperName(i) = DWG1.Layouts(i).Name 38 'Debug.Print (PaperName(i)) 39 If PaperName(i) = "Model" Then 40 ModelPaperN = i 41 Else 42 DWG1.SaveAs (Path & "\" & FileName & "-" & PaperName(i) & ".dwg") 43 For j = 0 To DWG1.Layouts.Count - 1 44 Debug.Print (j & " " & DWG1.Layouts(j).Name) 45 If DWG1.Layouts(j).Name <> "Model" And DWG1.Layouts(j).Name <> PaperName(i) Then 46 DWG1.Layouts(j).Delete 47 Debug.Print ("削除") 48 End If 49 Next 50 End If 51 DWG1.Save 52 DWG1.Close 53 Next 54 55End Sub
発生している問題・エラーメッセージ
ループでi=0, j=6のとき、
Debug.Print (j & " " & DWG1.Layouts(j).Name)
の部分でエラーが起こり、
実行時エラー '5' プロシージャの呼び出し、または引数が不正です。
というエラーが発生します。
どのようにすれば改善するでしょうか?
補足
- AutoCAD VBAは、Civil 3D 2022から使用しています。
- 動作テストに使用したdwgファイルには8個のレイアウトがあります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。