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

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

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

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

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

マクロ

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

Q&A

解決済

1回答

12246閲覧

エクセルVBAからACCESSのマクロを実行した際のエラーの解決(エラー内容:runmacro アクションの実行は取り消されました)

momodebi

総合スコア13

VBA

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

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

マクロ

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

0グッド

0クリップ

投稿2020/01/31 01:46

エクセルVBAからACCESSのマクロを複数実行したいと考えております。
但し、ACCESS上は大元のマクロにマクロ1、マクロ2というように複数登録しており、
エクセルVBAで動かすACCESSのマクロは、複数のマクロを登録した大元のマクロを動かしています。

そうした際に、
エクセルVBAから実行すると、
ACCESS上で「runmacro アクションの実行は取り消されました」とのエラーが出てしまいます。
エクセルVBA上では、オートメーションメーションエラーですとの表示が出てしまいます。

他方、エクセルVBAをかまさず、ACCESSから大元のマクロを実行する分にはエラーが出ない状況です。
お知恵を貸していただけますと幸いです...

コードは以下のとおりです。

#エクセルVBAのコード Sub access2() Application.ScreenUpdating = False Dim oAcc As Object Dim sPath As String 'MDBパス sPath = "*****" 'MDBオープン Set oAcc = CreateObject("Access.Application") Call oAcc.OpenCurrentDatabase(sPath) With oAcc .Run "実行" .CloseCurrentDatabase '閉じる .Quit End With Set oAcc = Nothing MsgBox "完了しました" End Sub
#ACCESS上のコード Public Sub 実行() #このマクロには、複数のマクロを動かすように設定しています DoCmd.RunMacro "マクロ" End Sub

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

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

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

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

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

guest

回答1

0

ベストアンサー

回答を変更しました。

VBA

1#ACCESS上のコード 2Public Sub 実行() 3#このマクロには、複数のマクロを動かすように設定しています 4DoCmd.RunMacro "マクロ" 5End Sub

DoCmd.RunMacroは非同期で実行します。よって実行()内で非同期で実行している
"マクロ"が動作中に.CloseCurrentDatabaseでデータベースを閉じてAccessを終了しようとしています。
よって、Accessは「runmacro アクションの実行は取り消されました」となります。

同期で待つ場合は、その中の処理でも非同期で実行されるものがあっては
想定通りの処理はされません。

VBA

1Public Sub 実行() 2 #このマクロには、複数のマクロを動かすように設定しています 3 Application.Run "マクロ" 4 Application.Run "マクロ2" 5 Application.Run "マクロ3" 6End Sub

以下間違い

VBA

1 With oAcc 2 .Run "実行" 3 .CloseCurrentDatabase '閉じる 4 .Quit 5 End With

.Run "実行"は非同期で実行します
"実行"マクロが動作中に.CloseCurrentDatabaseでデータベースを閉じてAccessを終了しようとしています。
よって、Accessは「runmacro アクションの実行は取り消されました」となります。

よって、何らかの方法でAccessで実行しているマクロ実行が終了するのを待つ必要があります。
マクロの実行が終了してから.CloseCurrentDatabase,.Quitする必要があります。

投稿2020/01/31 01:52

編集2020/01/31 04:29
Y.H.

総合スコア7914

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

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

sazi

2020/01/31 03:48

前の質問に、未検証ですけど、 > Runメソッドの第3引数には、プログラムの実行が終了するまで待つかどうか、をTrue/Falseで指定できます と回答しているんですけどね。
Y.H.

2020/01/31 04:10

あうぅ Access.Application.Runメソッドって第2引数以降すべて実行するマクロの引数として渡されると思ってました。 今まで待つ必要ある時は、終了時に実行ステータス持ったテーブルに書いておいてVBScriptではそれ読んで待つとかしてました。。。
Y.H.

2020/01/31 04:34 編集

あぁ、Runメソッドじゃなかった。待つ処理書いてたのはDoCMDだった。 なんか混乱してきた:-( [整理] 非同期:DoCmd.RunMacro macroName [arg1]... 非同期:WScript.Shell.Run path, windowsState, False 同期:Access.Application.Run macroName [arg1]... 同期:WScript.Shell.Run path, windowsState, True
sazi

2020/01/31 06:01

>@Y.H.さん コメントは、Y.H.さん向けではなく、質問者さん向けです。 回答として、投稿するほどではないかなと思ってコメントしました。 混乱させてしまったのなら、ごめんなさい。
sazi

2020/01/31 06:04

Runメソッドの引数について公式ドキュメント探したけど見つからなかったので、裏取りは質問者さんが試されれる方が効率良いと思っています。
momodebi

2020/01/31 09:36

お二人ともありがとうございます。 会社のパソコンで作業を想定しているため、 月曜日以降に教えて頂いたものを試させていただきます。 大変助かりました。
momodebi

2020/02/04 23:39 編集

''' VBAPublic Sub 実行() #このマクロには、複数のマクロを動かすように設定しています Application.Run "マクロ" Application.Run "マクロ2" Application.Run "マクロ3" End Sub ''' を試したのですが、今度は"マクロ"プロシージャが見つかりませんとのエラーが出てしまいます。 色々調べて、Application.Runは標準モジュール上のものを実行するものだと分かりましたが、 どのように修正すれば良いか分かりかねています。 質問を分けた方がよろしければ、分けさせて頂きます。
momodebi

2020/02/05 03:11

色々とありがとうございました。 一旦質問を分けさせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問