teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

2021/03/02 01:27

投稿

退会済みユーザー
answer CHANGED
@@ -21,7 +21,7 @@
21
21
  print(e)
22
22
  return xw.Book(filename).app
23
23
 
24
- # ThreadPoolExecutor終了時に戻ってくる関数。
24
+ # run_macro終了時に戻ってくる関数。
25
25
  # add_done_callbackよりも前に定義すること。
26
26
  def quit(res):
27
27
  app = res.result()

3

2021/03/02 01:27

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- エクセルマクロ実行中にpython上別処理をさせる場合下記のようになるでしょうか。
1
+ エクセルマクロ実行中に**python上**別処理をおこなう場合下記のようになるでしょうか。
2
2
  別スレッドでマクロを実行させています。
3
3
                                                                          
4
4
  ```

2

2021/03/02 01:26

投稿

退会済みユーザー
answer CHANGED
@@ -50,4 +50,9 @@
50
50
 
51
51
  # すべてのプログラム終了時に下記実行してThreadPoolExeccutorを終了させる
52
52
  executor.shutdown()
53
- ```
53
+ ```
54
+
55
+
56
+ -----------
57
+ エクセルで走っているマクロを外部から中断もしくは終了させるというのは、難しいと思います。
58
+ マクロ側で工夫するとか(たとえばマクロ側で定期的にファイルを読み取り、そのファイルに終了コマンドが書かれていたら終了するようにする。pythonからはそのファイルに終了コマンドを書き込む→ただし、ファイルのロックとかの問題が生じそう)

1

2021/03/02 01:25

投稿

退会済みユーザー
answer CHANGED
@@ -32,9 +32,9 @@
32
32
  print("xlwingオブジェクトを正常に受け取れませんでした。")
33
33
 
34
34
  # マクロブックのファイルパス
35
- filename = 'testprog.xlsm'
35
+ filename = 'テストプログラム.xlsm'
36
36
  # マクロ名
37
- macroname = 'calc'
37
+ macroname = 'test'
38
38
 
39
39
  # 別スレッドで実行させるためのオブジェクト
40
40
  executor = ThreadPoolExecutor()