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

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

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

xlwingsは、ExcelをPythonで操作するためのオープンソースライブラリです。

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1847閲覧

xlwingsで図形にマクロを登録したい (結構困っています)

PePePeT_i_C

総合スコア31

xlwings

xlwingsは、ExcelをPythonで操作するためのオープンソースライブラリです。

VBA

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

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

2クリップ

投稿2021/06/09 08:37

編集2021/06/09 09:39

やりたいこと

  • xlwingsで以下に**「マクロ名の登録」に相当するコードを実装したい**が、うまく実装ができないです

※水色ハイライトの関数を図形に登録したい

  • 図形をクリックした際にVBAの関数を発火させるコードを教えていただけないでしょうか?
  • xlwingsで実装が不可な場合、外部からのプログラミングで上記太文字を満たす手段を教えてもらえないでしょうか?

(言語・ライブラリはなんでもOKです)
イメージ説明

前提

  • Excelアプリから操作はできず、xlwingsからのアクセスのみ編集可能
  • 関数は既にExcel内にコードとして保存されている状態
  • 図形はExcel内に保存されいてる状態

該当のソースコード / 試したこと

  • ShapeオブジェクトにOnActionプロパティが無さそう(デバッガより確認)
  • shape.OnAction="マクロ名"で代入はできるが、実際にExcelを開いたときマクロは登録されていない

python

1import xlwings as xw 2""" 3>>> pip install xlwings --version 0.23.3 4""" 5path="ファイル名" 6work_book = xw.Book(path) 7for sheet in work_book.sheets: 8 for shape in sheet.shapes: 9 # ファイル名!Sheet1.isClicked してもNGだった 10 shape.OnAction = "Sheet1.isClicked" 11work_book.save(path) 12print("save")

公式ドキュメント

VBA Shapeオブジェクト

https://docs.microsoft.com/ja-jp/office/vba/api/excel.shape

xlwings Shapeオブジェクト

リンク内容

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決できました。

原因

  • xlwingsでShape.OnActionプロパティを対応していないことが原因(元々わかっていた)

代替策

  1. GitHub issue をopenにする
  2. pywin32 で書き込む

今回は2で対応しました

説明

  • pywin32 は、xlwingsにラップされているモジュール
  • 呼び出し方法さえわかれば、xlwingsのみのインストールでOK!
  • xlwingsよりもできることが多そうだが、コードが散らかりそう。。。

対応方法

python

1import xlwings as xw 2""" 3>>> pip install xlwings --version 0.23.3 4""" 5path="ファイル名" 6work_book = xw.Book(path) 7for sheet in work_book.sheets: 8 for shape in sheet.shapes: 9 # Object.api.プロパティでアクセスできる 10 shape.api.OnAction = "Sheet1.isClicked" 11work_book.save(path) 12print("save")

詳細

  • shape.api.OnAction = '関数名' で図形に関数を登録できる
  • Object.apiでVBAのオブジェクトを直接操作できる

投稿2021/06/10 00:39

編集2021/06/10 00:40
PePePeT_i_C

総合スコア31

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問