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

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

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

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

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

3回答

1724閲覧

VBSからAccessのモジュールを呼び出した際のエラー処理について

siroutouser

総合スコア2

VBA

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

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2022/10/31 08:30

前提

VBScriptからAccess上のモジュールを呼び出すツールを作成しています。

実現したいこと

VBSからモジュールを呼び出した際に、呼び出し先でエラーが発生した時に処理を終了するようにしたいです。
呼び出し元のVBSにエラーが発生していることを通知し、そこでスクリプトを終了したいです。

発生している問題・エラーメッセージ

現状VBSからAccessのモジュールを呼び出すこと、また、呼び出したモジュール内でエラー処理(ラベルのError1:へ飛ぶ)ができていることは確認できていますが、呼び出し元のVBSにエラーが起きたことを通知することができていません。

確認した内容
AccessVBA内のMsgBox "エラー発生"が表示されることを確認
MsgBox retはからのメッセージボックスが表示されている状態

該当のソースコード

VBS

1Dim ret 2ret = AcApp.Application.Run (access_module) 3 4MsgBox ret 5 6If ret <> 0 Then 7 WScript.Quit 8Else 9 MsgBox "処理成功" 10End If 11

Access

1Sub access_module() 2 Dim file_check 3 file_check = Dir("この後読み込むファイル名") 4 5 If file_check = "" Then 6 GoTo Error1 7 Else 8 Open "この後読み込むファイル名" For Input As #0 9 'ここは正常系の処理が書かれています。 10 End If 11Error1: 12 'DB終了処理 13 MsgBox "エラー発生" 14End Function 15

お手数をおかけしますが、ご回答の程よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

yshima1129 さんのやり方でイケるっぽいです。以下、実行結果になります。

test.vbs

1Option Explicit 2 3Call Main() 4 5Sub Main() 6 Dim app 7 Set app = CreateObject("Access.Application") 8 app.OpenCurrentDatabase "C:\test\test.mdb" 9 10 Dim ret 11 ret = app.Application.Run ("access_module") 12 13 MsgBox ret 14 15 If ret <> 0 Then 16 WScript.Quit 17 Else 18 MsgBox "処理成功" 19 End If 20 21End Sub

Moduel1.bas

1Function access_module() 2 access_module = 9 3End Function
C:\test>CScript test.vbs Microsoft (R) Windows Script Host Version 5.812 Copyright (C) Microsoft Corporation. All rights reserved.

実行結果
イメージ説明

投稿2022/10/31 13:06

cx20

総合スコア4633

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

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

siroutouser

2022/11/01 01:18

お時間を割いていただきありがとうございました。 Runの引数を文字列にすることで、自分の方でも実行することができました。 本件ご対応いただきありがとうございます。
guest

0

ベストアンサー

Function にして戻り値で渡すことは可能です。(当方のサンプルで確認できました。)

他の部分に間違いがあります。下記の※のコメント部分を修正すると正常に動作するはずです。

vba

1Function access_module() As Integer 2 Dim file_check 3 file_check = Dir("この後読み込むファイル名") 4 5 If file_check = "" Then 6 GoTo Error1 7 Else 8 Open "この後読み込むファイル名" For Input As #0 9 'ここは正常系の処理が書かれています。 10 End If 11 Exit Function '※これがないとエラーがでなくても下記のコードが実行される。 12Error1: 13 'DB終了処理 14 access_module = 9 15End Function

vbs

1Dim AcApp 2Set AcApp = CreateObject("Access.Application") 3'データベースファイルをオープン 4acApp.OpenCurrentDatabase "C:\test\Database1.accdb" 5 6Dim ret 7ret = AcApp.Application.Run("access_module") '※Application.Runの引数は文字列で 8 9MsgBox ret 10 11If ret <> 0 Then 12 WScript.Quit 13Else 14 MsgBox "処理成功" 15End If 16acApp.Quit

投稿2022/10/31 12:40

hatena19

総合スコア33715

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

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

siroutouser

2022/11/01 01:16

お時間を割いていただきありがとうございました。 ご指摘いただいた通り、Runの引数を文字列指定にすることで戻り値を受け取ることができました。 ご丁寧に解説をいただき、ありがとうございました。 大変、勉強になりました。
guest

0

SubをFunctionに変更し、access_moduleに戻り値を入れれば、VBSに渡せるかな?(未検証)

Access

1Function access_module() 2 Dim file_check 3 file_check = Dir("この後読み込むファイル名") 4 5 If file_check = "" Then 6 GoTo Error1 7 Else 8 Open "この後読み込むファイル名" For Input As #0 9 'ここは正常系の処理が書かれています。 10 End If 11Error1: 12 'DB終了処理 13 access_module = "エラー発生" 14End Function

投稿2022/10/31 08:43

yshima1129

総合スコア179

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

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

siroutouser

2022/10/31 08:50

早々にご回答いただきありがとうございます。 Access側のSubをFunctionに変更しましたが、VBS側のMsgBoxはからのままでした。 変更点 ①Sub access_module()→Function access_module() As Integer ※併せてEnd Fuctionに変更 ②Error1:中で以下のコードを追加 access_module = 9 ※9に特に意図はありません。
yshima1129

2022/10/31 08:54

ダメでしたか・・・。すみません。
siroutouser

2022/11/01 01:15

とんでもないです、お時間を割いていただきましてありがとうございます。 また、自分の書き方が悪かったようで、上記で動かすことができました。 Runの引数が文字列になっていなかったことが問題の様で、VBA側をFunctionに変更することで戻り値を受け取ることができました。 諸々、ご対応いただきありがとうございます。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問