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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

PyCharm

エディター・開発ツール

Q&A

解決済

1回答

4726閲覧

PythonでExcelファイルがうまく閉じない

4n5

総合スコア16

VBA

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

PyCharm

エディター・開発ツール

0グッド

2クリップ

投稿2019/02/27 18:32

PythonでのExcel操作について質問させてください。
Pythonについては超初心者なので何卒宜しくお願い致します。

◆事象
Excelファイルオープン

マクロ実行

ファイルクローズ(保存しないで閉じる)

上記の流れでコードを実行した際にクローズがうまくできずにテンポラリファイル状態で半透明のアイコンのままコードが終了してしまいます。

ためしたこと

  • オープン、クローズがうまくいくパターン

①マクロを実行しないでオープン、クローズのみの場合
②他ファイルのマクロ実行→クローズの場合(単なるファイル移動マクロです)
※②のマクロに移動後セルに「○」を書き込むコードを追加したら上記事象と同じく、うまくクローズできませんでした

  • 保存して閉じる(SaveChanges=1)の場合でも変わらない
  • Close→closeに変更すると「保存しますか」のダイアログが出てしまう

◆コードはPycharmにて書いてます

下記コードにて指摘箇所ございましたらご指導のほど、宜しくお願い致します。

import os import win32com.client import shutil macro_path = r'C:\Users\○○.xlsm' def run_macro(macro_path): macro_wb = macro_path if os.path.exists(macro_wb): xl = win32com.client.Dispatch("Excel.Application") xl.Workbooks.Open(os.path.abspath(macro_path), ReadOnly=1) xl.Application.Run("'○○.xlsm'!Main") xl.Workbooks(1).Close(SaveChanges=0) xl.Application.Quit() del xl if __name__ == '__main__': run_macro(macro_path)

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

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

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

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

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

guest

回答1

0

ベストアンサー

結論から言って、私の環境(Win10/Excel2010/python 3.x)では再現しませんでした。
やったこと。
1.win32comインストール
2.○○.xlsm→176844.xlsm
3.A1に文字を出力

vba/

1Sub Main() 2Worksheets(1).Range("a1").Value = "aaaaa" 3End Sub

4.SaveChanges=0 or 1
ということで、保存なしも保存ありも、それぞれ正常に実行できます。

②他ファイルのマクロ実行

これはpythonで開いた(ここでは176844.xlsm)のマクロから別ファイルのマクロを呼び出すということでしょうか?

Close→closeに変更

確かにこれは挙動がおかしいです。Run→runは問題ないんですけどね。
ちなみにquitはokで、他のdispatch、openはエラーになりました。

ということで、pythonのコードよりもvbaのコードの問題ではないかと。
シンプルなvbaコードから、徐々に問題点を絞り込むのが得策だと思います。

投稿2019/02/28 07:26

編集2019/02/28 07:27
toshi17922062

総合スコア183

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

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

4n5

2019/03/02 01:53

VBAのエラー処理の関係で「End Sub」ではなく「End」で終了させていたことが原因だったようです。 こちらのエラー処理を直したところ、Pythonからでも問題なくクローズさせることができました。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問