回答編集履歴
4
answer
CHANGED
@@ -21,7 +21,7 @@
|
|
21
21
|
print(e)
|
22
22
|
return xw.Book(filename).app
|
23
23
|
|
24
|
-
#
|
24
|
+
# run_macro終了時に戻ってくる関数。
|
25
25
|
# add_done_callbackよりも前に定義すること。
|
26
26
|
def quit(res):
|
27
27
|
app = res.result()
|
3
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
エクセルマクロ実行中にpython上別処理を
|
1
|
+
エクセルマクロ実行中に**python上**別処理をおこなう場合、下記のようになるでしょうか。
|
2
2
|
別スレッドでマクロを実行させています。
|
3
3
|
|
4
4
|
```
|
2
answer
CHANGED
@@ -50,4 +50,9 @@
|
|
50
50
|
|
51
51
|
# すべてのプログラム終了時に下記実行してThreadPoolExeccutorを終了させる
|
52
52
|
executor.shutdown()
|
53
|
-
```
|
53
|
+
```
|
54
|
+
|
55
|
+
|
56
|
+
-----------
|
57
|
+
エクセルで走っているマクロを外部から中断もしくは終了させるというのは、難しいと思います。
|
58
|
+
マクロ側で工夫するとか(たとえばマクロ側で定期的にファイルを読み取り、そのファイルに終了コマンドが書かれていたら終了するようにする。pythonからはそのファイルに終了コマンドを書き込む→ただし、ファイルのロックとかの問題が生じそう)
|
1
answer
CHANGED
@@ -32,9 +32,9 @@
|
|
32
32
|
print("xlwingオブジェクトを正常に受け取れませんでした。")
|
33
33
|
|
34
34
|
# マクロブックのファイルパス
|
35
|
-
filename = '
|
35
|
+
filename = 'テストプログラム.xlsm'
|
36
36
|
# マクロ名
|
37
|
-
macroname = '
|
37
|
+
macroname = 'test'
|
38
38
|
|
39
39
|
# 別スレッドで実行させるためのオブジェクト
|
40
40
|
executor = ThreadPoolExecutor()
|