Excel VBA対応メモ

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

VS Code対応

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

GitHub - vbaidiot/ariawase: Ariawase is free library for VBA cowboys.
Ariawase is free library for VBA cowboys. Contribute to vbai...
XVBA - Live Server VBA - Visual Studio Marketplace
Extension for Visual Studio Code - Edit VBA files from Excel...

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

参考

Excelマクロ(VBA)をVSCodeで編集したい
Visual Studio CodeをExcelマクロ編集時のエディタとして使用しつつ、Excel単独ではできないgit...

Pythonから操作

シート保護

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

xlwings Documentation

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)

参考

Python pywin32(win32com) Excel 操作備忘録 - Qiita
はじめにノンプログラマーの素人が記述をしたコードです。狭い利用範囲と少ない利用頻度での確認ですので、記載内容に間違いや勘...
PythonでExcelを操作してみる
自分がやりたいのは 「マクロの実行」 「VBAソースコードを取得、操作」 ですが、果たしてうまくいくのでしょうか? Py...
タイトルとURLをコピーしました