質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

解決済

AutoCAD VBAで「プロシージャの呼び出し、または引数が不正です。」エラー

koridentetsu
koridentetsu

総合スコア23

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

1回答

0リアクション

0クリップ

278閲覧

投稿2022/08/05 00:40

状況

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

Public Sub test1() Dim i As Long, j As Long Dim FileName As String Dim PaperCount As Long Dim PaperName() As String Dim ModelPaperN As Long Dim Path As String, FullFileName As String Dim 残すレイアウト名 As String Dim DWG1 Dim Paper1 As AcadLayout Set DWG1 = ActiveDocument FileName = DWG1.Name Path = DWG1.Path '図面の保存パス FullFileName = Path & "\" & FileName FileName = Replace(FileName, ".dwg", "") FileName = Replace(FileName, ".DWG", "") 'ファイル名を取得してから、拡張子を除去したファイル名を取得 PaperCount = DWG1.Layouts.Count - 1 'レイアウトの総数を数え上げる。「モデル」も数えられるのでレイアウト数+1になるから、1を引く ReDim PaperName(PaperCount) As String For i = 0 To PaperCount PaperName(i) = DWG1.Layouts(i).Name Debug.Print (i & " " & PaperName(i)) Next For i = 0 To PaperCount If i > 0 Then Application.Documents.Open (FullFileName) Set DWG1 = ActiveDocument End If PaperName(i) = DWG1.Layouts(i).Name 'Debug.Print (PaperName(i)) If PaperName(i) = "Model" Then ModelPaperN = i Else DWG1.SaveAs (Path & "\" & FileName & "-" & PaperName(i) & ".dwg") For j = 0 To DWG1.Layouts.Count - 1 Debug.Print (j & " " & DWG1.Layouts(j).Name) If DWG1.Layouts(j).Name <> "Model" And DWG1.Layouts(j).Name <> PaperName(i) Then DWG1.Layouts(j).Delete Debug.Print ("削除") End If Next End If DWG1.Save DWG1.Close Next End Sub

発生している問題・エラーメッセージ

ループでi=0, j=6のとき、
Debug.Print (j & " " & DWG1.Layouts(j).Name)
の部分でエラーが起こり、

実行時エラー '5' プロシージャの呼び出し、または引数が不正です。

というエラーが発生します。
どのようにすれば改善するでしょうか?

補足

  • AutoCAD VBAは、Civil 3D 2022から使用しています。
  • 動作テストに使用したdwgファイルには8個のレイアウトがあります。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。