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

回答編集履歴

2

回答変更

2020/01/31 04:29

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -1,4 +1,33 @@
1
+ 回答を変更しました。
2
+
1
3
  ```VBA
4
+ #ACCESS上のコード
5
+ Public Sub 実行()
6
+ #このマクロには、複数のマクロを動かすように設定しています
7
+ DoCmd.RunMacro "マクロ"
8
+ End Sub
9
+ ```
10
+
11
+ `DoCmd.RunMacro`は非同期で実行します。よって`実行()`内で非同期で実行している
12
+ `"マクロ"`が動作中に`.CloseCurrentDatabase`でデータベースを閉じてAccessを終了しようとしています。
13
+ よって、Accessは「runmacro アクションの実行は取り消されました」となります。
14
+
15
+ 同期で待つ場合は、その中の処理でも非同期で実行されるものがあっては
16
+ 想定通りの処理はされません。
17
+
18
+ ```VBA
19
+ Public Sub 実行()
20
+ #このマクロには、複数のマクロを動かすように設定しています
21
+ Application.Run "マクロ"
22
+ Application.Run "マクロ2"
23
+ Application.Run "マクロ3"
24
+ End Sub
25
+ ```
26
+
27
+ ----
28
+ 以下間違い
29
+
30
+ ```VBA
2
31
  With oAcc
3
32
  .Run "実行"
4
33
  .CloseCurrentDatabase '閉じる

1

追記

2020/01/31 04:29

投稿

Y.H.
Y.H.

スコア7918

answer CHANGED
@@ -8,4 +8,7 @@
8
8
 
9
9
  `.Run "実行"`は非同期で実行します
10
10
  `"実行"`マクロが動作中に`.CloseCurrentDatabase`でデータベースを閉じてAccessを終了しようとしています。
11
- よって、Accessは「runmacro アクションの実行は取り消されました」となります。
11
+ よって、Accessは「runmacro アクションの実行は取り消されました」となります。
12
+
13
+ よって、何らかの方法でAccessで実行しているマクロ`実行`が終了するのを待つ必要があります。
14
+ マクロの実行が終了してから`.CloseCurrentDatabase`,`.Quit`する必要があります。