- ベストアンサー
VBAでのExecuteExcel4Macroの値取得でエラー
- VBAを使用してExcelのExecuteExcel4Macro関数を実行して、別のExcelファイルのセルの値を取得しようとしていますが、特定のセル(店名)の値を取得する際にエラーが発生しています。
- 実行したマクロでは、指定したセルの値を取得するためにExecuteExcel4Macro関数を使用していますが、店名のセルの値を取得するとエラー2042が返されます。
- なお、他のセル(月度)の値は正常に取得できるため、問題は特定のセル(店名)に関連しているようです。解決策を探していますが、現時点では原因を特定できていません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
'------------------------------------------------- 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)
こんにちは。 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 '-----------------------------------