• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでのExecuteExcel4Macroの値取得でエラー)

VBAでのExecuteExcel4Macroの値取得でエラー

このQ&Aのポイント
  • VBAを使用してExcelのExecuteExcel4Macro関数を実行して、別のExcelファイルのセルの値を取得しようとしていますが、特定のセル(店名)の値を取得する際にエラーが発生しています。
  • 実行したマクロでは、指定したセルの値を取得するためにExecuteExcel4Macro関数を使用していますが、店名のセルの値を取得するとエラー2042が返されます。
  • なお、他のセル(月度)の値は正常に取得できるため、問題は特定のセル(店名)に関連しているようです。解決策を探していますが、現時点では原因を特定できていません。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

'------------------------------------------------- Sub Test()  Dim 店名  Dim 月度  店名 = 外部マクロ実行("'C:\[test.xls]出勤簿'!店名")  月度 = 外部マクロ実行("'C:\[test.xls]出勤簿'!月度")    If 店名 = 0 Or 月度 = 0 Then      MsgBox "取得失敗", vbExclamation    Else      MsgBox 店名 & " @ " & Format(月度, "yyyy/m/d")    End If End Sub '----------------------------------------------- Function 外部マクロ実行(com As String)   外部マクロ実行 = ExecuteExcel4Macro(com) End Function '----------------------------------------------- ●ただ今回の場合は、Functionは無しでもいいような。。。 '---------------------------------------------- Sub Test555()  Dim 店名  Dim 月度  店名 = ExecuteExcel4Macro("'C:\[test.xls]出勤簿'!店名")  月度 = ExecuteExcel4Macro("'C:\[test.xls]出勤簿'!月度")    If 店名 = 0 Or 月度 = 0 Then      MsgBox "取得失敗", vbExclamation    Else      MsgBox 店名 & " @ " & Format(月度, "yyyy/m/d")    End If End Sub '---------------------------------------------------- 以上。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 ExecuteExcel4Macro というスタイルは、直接、マクロ関数を取る以外は、追いかけないほうがよいかもしれませんが、そのコード自体は間違いありません。 >「エラー 2042」という値が入ります。 という意味は、「#N/A 」の戻り値です。 だから、そのエラー値は、数式側だけの問題です。数式を調べないといけません。 "'c:\[test.xls]出勤簿'!店名" 私としては、その書き方は、一見良いのですが、実際、ルートに置くわけではないでしょうから、失敗しやすいです。 これは、目的のファイルが開いていない状態で扱うときですが、実務上では、ファイルが開いていなければ、開けて、Evaluate で取るというのが、一般的な書き方です。そうでなければ、DAOやADOを使って開くというスタイルになります。 全体的に、Excelマクロとしては変則的なコードだと思います。 今回の場合は、ユーザー定義関数側では、参照渡しは、あまり良いとは思いません。実行時エラーと両方を取ろうとしたので、Boolean値のユーザー定義関数自体を戻り値にしたのだと思いますが、この種のものは、実行時エラーが発生するのは、コードの自体の間違いか、ファイルが存在しない間違いですから、Dir 関数などの回避の仕方はあると思います。単に、数式の戻り値を、ユーザー定義関数側に返すだけで十分な気がします。 なお、そのコードは「外部マクロ実行」ではありません。 '----------------------------------------   Dim 店名 As Variant, 月度 As Variant   Dim nShiki1 As String   Dim nShiki2 As String   Const nPATH = "'C:\Documents and Settings\[UserName]\My Documents\"   Const nWBNAME = "test.xls"   Const nSHNAME = "出席簿"   Const nADDRESS1 = "店名" '名前登録はそのまま、アドレスなら、R1C1方式   Const nADDRESS2 = "月度"      nShiki1 = "[" & nWBNAME & "]" & nSHNAME & "!" & nADDRESS1   店名 = Evaluate(nShiki1) 'ファイルが開いているかチェックする      If IsError(店名) Then     nShiki1 = nPATH & "[" & nWBNAME & "]" & nSHNAME & "'!" & nADDRESS1     nShiki2 = nPATH & "[" & nWBNAME & "]" & nSHNAME & "'!" & nADDRESS2            'Debug.Print nShiki ''数式の内容チェック     If 外部マクロ実行(nShiki1, 店名) = False Or _       外部マクロ実行(nShiki2, 月度) = False Then       MsgBox "取得失敗", vbExclamation       Exit Sub     End If   Else     nShiki2 = "[" & nWBNAME & "]" & nSHNAME & "!" & nADDRESS2     月度 = Evaluate(nShiki2)   End If End Sub '-----------------------------------

関連するQ&A