この掲示板は AutoCADマクロ屋本舗 の掲示板です。

【 注意 】最初に必ず ↓↓ 下記内容 ↓↓ を参照ください。
① マクロが分からない方は、まず 【 マクロ講座 】 を参照ください。
② 質問の前に 【 マクロ使用前の注意事項 】 をお読みください。
③ 質問する時は、新規投稿フォーム下の【 新規投稿時のお願い 】を必ずお読みください。

VBAについて
こんばんは。
以前、部品表データをexcelファイルに保存する方法を教えて頂きました。
その節はありがとうございました。
その部品表のレコードに列を追加してファイル名を追加したく
苦戦しております。
どなたか、助言して頂けませんでしょうか。
前回教えて到いたのは以下のコードです。

Public Sub exportPartsListExcel()
Dim BasePath As String
Dim BomName As String

BasePath = "C:\TEMP"
BomName = "MAIN"

Dim acadDoc As AcadDocument
Set acadDoc = Application.ActiveDocument

' SymbolBBMMgrを取得
Dim symBBmgr As McadSymbolBBMgr
Set symBBmgr = acadDoc.Application.GetInterfaceObject("SymBBAuto.McadSymbolBBMgr")

' McadBOMMgrを取得
Dim cadBOMmgr As SymBBAuto.McadBOMMgr
Set cadBOMmgr = symBBmgr.BOMMgr

' BOMNameのBOMTableが存在するかをチェック
If cadBOMmgr.BOMTableExists(BomName) Then
'BOMTableを取得
Dim cadBom As SymBBAuto.McadBOM
Set cadBom = cadBOMmgr.GetBOMTableByName(BomName)

'パーツリストを取得
Dim partsList As SymBBAuto.IMcadPartList
Set partsList = cadBom.partLists.Item(0)

'エクセル形式でエクスポート
If Not partsList Is Nothing Then
Dim fileName As String
Dim token As Variant
token = Split(acadDoc.Name, ".")
Call cadBOMmgr.ExportPartList(SymBBAuto.McadBOMExportFormatType.exEXCEL97, partsList, BasePath & "\" & token(0) & ".xls", "MAIN", True)
End If
End If

End Sub

  • パン君
  • 2025/03/12 (Wed) 01:48:56
Re: VBAについて
Mechanicalを使ったことがないので分からないのですが、これを使うと、dwgファイルと同じ名前のxlsファイルができて、そこに部品表のデータが書き出されると理解しているのですが、間違いないですか?

>その部品表のレコードに列を追加してファイル名を追加したく
このVBAでは「ExportPartList」というコードで部品表を書き出しています。これは、これは部品表を書き出すことに特化したコードだと思います。(おそらくMechanicalのコマンドで書き出すのと同じようなコマンドだと思われます)
なので、そこに列を追加して別のデータを付加してから書き出しということはできないのではないかと考えます。
そのため、書き出されたあとに再度そのExcelファイルに追加で記入、という方法になるのではないかと思います。

ただ、「列」を追加してファイル名を記入するのですか?
上記の理解があっているのならば、1つのdwgファイルに対して、1つのエクセルファイルが作成されると思うので、記入されるファイル名は全て同じではありませんか?
  • LUNE
  • 2025/03/12 (Wed) 14:21:28
Re: VBAについて
LUNEさん返信ありがとうございます。
> 上記の理解があっているのならば、1つのdwgファイルに対して、1つのエクセルファイルが作成されると思うので、記入されるファイル名は全て同じではありませんか?

おっしゃる通り全レコードに同じファイル名を部品表の列に追加したいと思います。
最終的には複数の図面の部品表をエキスポートして1つのexcelファイルにしたいです。
その時に各々がどの図面(ファイル)の部品表か
判別するためにレコードに図面番号(ファイル名)を追加したっかのですが。。。
無理でしょうか
  • パン君
  • 2025/03/12 (Wed) 22:37:33
Re: VBAについて
>最終的には複数の図面の部品表をエキスポートして1つのexcelファイルにしたいです。
1つのファイルにするなら、Excelのパワークエリ(2016以降で使える)を使ってはどうでしょう?
ファイル名が自動的に列として表示されます。
https://exceljoshi.cocoo.co.jp/media/excel-powerquery-file-merge





  • LUNE
  • 2025/03/13 (Thu) 09:23:10
Re: VBAについて
AutoCADのVBAは疎いので、私ならexcel側でファイル名を追加するVBAを組みます。

>最終的には複数の図面の部品表をエキスポートして1つのexcelファイルにしたい

出力された各ファイルから、ベースのファイルに コピペかシートの挿入でデータを集約するのだと思いますが、
その作業をVBAで自動化して、その中にファイル名を追加するコードも入れる。
  • Hamu
  • 2025/03/13 (Thu) 09:24:50
Re: VBAについて
LUNEさん、Hamuさん、お返事ありがとうございます。
LUNEさんから頂いた助言。。。ビックリ!EXCELでこんなことができるのですね。
私がしようしているEXCELバージョンは2016です。
サイトをみて色々さわっていますが、未だにファイル名を追加できません。(困った!!)

Hamuさんから頂いた助言。。。
知識不足のため未だにどこから突入するかわかりません。
参考サイトなどありますでしょうか。
  • パン君
  • 2025/03/13 (Thu) 17:45:54
Re: VBAについて
ファイル名はわざわざ追加しなくても、Souce.Nameで取り込まれるはずですが・・・
書き出したエクセルファイルを1つのフォルダにまとめて、フォルダから読み込んてみてください。
https://jsdg.org/blog/view035/

  • LUNE
  • 2025/03/14 (Fri) 10:36:11
Re: VBAについて
LUNEさん、早々のご案内ありがとうございます。
ご紹介いただいたサイトの通り操作するとイメージ通りになりました。
こんな便利な機能がexcelにあるとは。。。
  • パン君
  • 2025/03/14 (Fri) 12:14:57

返信フォーム






プレビュー (投稿前に内容を確認)