プロが教えるわが家の防犯対策術!

お世話になります。


Access2016で作成しています。
①Accessのボタンを押下
②VBAのでエクセルを起動し、エクセルのマクロを実行
 'Application.Run "Book1.xls!test1", "マクロ"
③エクセルでエラー
④Access側で③のエラーを検出し、メッセージボックスを出す
という流れにしたいのです。

たとえば、②のソースを
判定=Application.Run "Book1.xls!test1", "マクロ"
if 判定=false then
msgbox("エクセルでエラーです。")
endif
という風にしたいのですが、
どのようにすれば可能でしょうか。

何とぞよろしくお願いいたします。

A 回答 (2件)

「 Application.Run "'" & FullName & "'!" & "myTestMacro"」


一般プロシージャの場合は戻り値がありませんので
判定 = .....
で取れません。
どちらでもよいことですが、質問のコードは、Excelが開いている時の呼び出しで、こちらは、閉じていても呼び出すコードです。フルパス(FullPath) とアポトロフィー(')が加わる所に違いが出ます。

'//呼び出しマクロ
Sub Test1()
 Dim FullPath As String
 FullPath = "C:\Users\abc123\Documents\MyExcelMac.xlsm"
 On Error Resume Next
  Application.Run "'" & FullPath & "'!" & "myTestMacro"
 If Err() <> 0 Then
  MsgBox "エクセルでエラーです。" & Err.Number, vbCritical
 End If
 On Error GoTo 0
End Sub
    • good
    • 0

未検証ですが、以下では、いかがでしょうか。


https://docs.microsoft.com/ja-jp/office/vba/lang …
を参考に、

On Error GoTo xxx

ここに、質問内の処理を記載

(本プロシージャ(関数?)の末尾に、ラベルと処理)

xxx:
Errorオブジェクト等からエラーコード取得、対処
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています