【python】win32comでVBAを操作しよう

この記事は約4分で読めます。

資料作成においてWord・Excelはまだまだ現役です。クラウド上で作成できる
スプレッドシートなど便利なものはありますが、社外に提出するときに対応できないことも
あります。

そんなときはpythonの処理とVBAを組み合わせることで出来る幅が広がり
業務効率化が期待できます。

pythonからVBAを操作するメリット

pythonの処理をVBAに渡せる

日常業務ではWord・Excel操作のみならず、ファイルのコピーなど単純作業を繰り返しています。
そういったWindowsの操作をpythonに、Office製品の操作をVBAで行えば作業がほぼ自動化
できます。

pythonでWord・Excelの操作は出来ないこともある

pythonでWord・Excel操作が出来る有名なライブラリは「openpyxl」や「python-docx」が
ありますが、全ての操作が出来るわけではありません。

例えばExcelのでの画像挿入では「openpyxl」では挿入は出来ますが、サイズをピクセル単位で
しか指定できないため枠内に収めるといった処理が出来ません。

出来ること、出来ないことを検証する時間も惜しいですし、ネットに落ちているVBAで事足りる
のならばそちらで済ましたほうが効率的です。

win32comの使い方

pythonでWindowsのアプリ・ファイルを扱えるのがwin32comモジュールです。
python上からVBAを実行してみましょう。まずはサンプルコードを。

import pythoncom
import win32com.client

def word_macro_run():
    pythoncom.CoInitialize()
    word = win32com.client.Dispatch("Word.Application")
    word.Visible = true
    abspath = str(Path(r"VBA_template\Join_Word.docm").resolve())
    document = word.documents.Open(abspath, ReadOnly=1)
    document.Application.Run("macro_name")
    document.Close()
    word.Quit()

起動するソフトを選択

 word = win32com.client.Dispatch("Word.Application")

で起動するソフトを選択しています。サンプルではWordになっていますがExcelの場合はExcelを選択します。

ソフト画面の表示・非表示

word.Visible = true

ソフトの画面を表示させる場合にはTrue、非表示の場合にはFalseを選択します。

開くファイルを定義する

 abspath = str(Path(r"VBA_template\Join_Word.docm").resolve())

予めマクロ機能を複数搭載したテンプレートを用意しておけば後は実行するだけです。ソフト別に用意しておくと
便利です。

ファイルを開く

 document = word.documents.Open(abspath, ReadOnly=1)

こんな感じでファイルを開きます。エクセルの場合はdocumentsworksheetsに変更してください。

マクロを実行する

document.Application.Run("macro_name")

マクロ関数名を選択し、マクロを実行します。

ソフトを閉じる

document.Close()
word.Quit()

最後にソフトを閉じてプロセスを終了します。

まとめ

業務でよく使う資料やデータをpythonで処理をして、仕上げにVBAを実行する。
今回の事でそのようなことが出来るようになります。

私の場合だと、よく使う膨大な資料を分割して必要な部分だけを簡単に結合できる
自分の業務用GUIアプリを作成しました。

ファイルを毎回1から探して結合する作業から解放されたのでとても便利です。

アイディア次第でなんでも出来るのがプログラミングの良いところ。
自分の業務で適用できるか考えてみるのもいいかもしれません。

コメント

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