Excel VBA対応メモ

仕事でExcelマクロをいじったりExcelファイルを自動で操作したりということが多いので自分のやり方の備忘録です。以下は2022年最初の頃の情報をもとにした内容です。

VS Code対応

Excelからマクロ部分を抜き出してVS Codeでコーディングする場合、vbac.wsfを使って抜き出したファイルを使用するか、XVBAというVS Codeの拡張機能を使うのが一般的なようです。

https://github.com/vbaidiot/Ariawase

https://marketplace.visualstudio.com/items?itemName=local-smart.excel-live-server

XVBAはExcelからのImport、ExcelへのExportをVS Code内で簡単に実行でき楽そうです。
使用してみたところ、Exportする際クラスモジュールが日本語名だと失敗しました(v4.0.26にて確認)。これに気づかずちょっと詰まりました。標準モジュールやフォームは日本語を含んでいてもExportできました。Exportは日本語名のクラスモジュールを読み込むまで行うため、ぱっと見成功しているように見えて途中で失敗していたりします。その場合VBEのエラーダイアログが表示されるのですが、意味がよく分からず無視してExcelファイルを保存するとExportを失敗した後のコードが消えます。その状態でVS Code側にImportすると終わります:)

参考

https://kanegolabo.com/vba-edit#toc1

Pythonから操作

シート保護

Python初心者なので変なことかいてたらすいません。
PythonからExcelを操作するライブラリはいくつかあります。Excelのシートに画像を貼りつけている場合、xlwingsを使用するのが簡単だと思います。

https://docs.xlwings.org/ja/latest/index.html

xlwingsの使い方は調べればいろいろと出てくるしAPIのリファレンスもあるのですが、シート保護でちょっと悩んだのでメモしておきます。
調べた感じでは現状xlwings自体にシート保護のメソッドは実装されていないと思います。ただ、apiプロパティでnative objectを取得することが可能です。Windows OS上ではpywin32のオブジェクトが取得できます。pywin32の使用方法も調べればいろいろ出てくるのですが、apiで取得したシートのオブジェクトをProtect()すればシート保護できました。私の使い方だとxlwingsで手が届かないところだけこの方法で操作すればよさそうです。

ws.api.Protect()

Xdebugクラスの解放

XVBAがDebug用に追加しているっぽいXdebugクラスモジュールですが、納品時に不要なため忘れないように解放します。これは上記内容を参考にワークブックのnative objectを取得すると可能でした。

# XDebugクラスの解放
module = wb.api.VBProject.VBComponents.Item("Xdebug")
wb.api.VBProject.VBComponents.Remove(module)

参考

https://qiita.com/feo52/items/150745ae0cc17cb5c866

http://kagetsu.sblo.jp/article/186477958.html

タイトルとURLをコピーしました