【先着1,000名様!】1,000円分をプレゼント!

こんにちは。
Excel VBAより、ExecuteExcel4Macroを実行して、
外部のExcelファイルの、名前(店名、月度)を定義したセルの値を取得したいと思っています。
店名:文字列型
月度:Date型

そこで、ExecuteExcel4Macro()を実行し、以下のような処理を加えました。

------------------------------------------------------------------------------------

dim 店名 as Variant, 月度 as Variant
If 外部マクロ実行("'c:\[test.xls]出勤簿'!店名", 店名) = False Or _
外部マクロ実行("'c:\[test.xls]出勤簿'!月度", 月度) = False Then
MsgBox "取得失敗", vbExclamation
End
End If


Public Function 外部マクロ実行(com As String, ByRef result As Variant) As Boolean
On Error GoTo erron3
result = ExecuteExcel4Macro(com)
On Error GoTo 0
外部マクロ実行 = True
Exit Function

erron3:
外部マクロ実行 = False
End Function

------------------------------------------------------------------------------------

これを実行したところ、「月度」の値は取得できるのですが、
「店名」の値には「エラー 2042」という値が入ります。
※dirname, filenameは正しい値が入っています。
※シート「出勤簿」および「月度」「店名」のセル名の定義も存在します。

test.xlsを開いてるときは、上記の現象は起こらず、
「店名」の値は正常に取得できます。


また、試しに、test.xlsを開き、
Worksheets("出勤簿").Range("店名")を実行すると、正常な値が取得できました。


まとめると、
・閉じたブックの、あるシートにある、セルに定義された名前を指定して
・ExecuteExcel4Macroで、文字列が入っている値を取得しようとした時、
・正常に値が取得できない
という現象に遭遇しています。

3日ほど調べているのですが、どうしても原因が分かりません。
解決策をお持ちの方、いらっしゃいましたらアドバイスを頂けると助かります。

環境:WindowsXP Pro SP3
Excel 2003 (11.5612.5606)

以上、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (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
'----------------------------------------------------

以上。
    • good
    • 0

こんにちは。



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
'-----------------------------------
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む

QエクセルVBAで#N/Aのようなエラー値を含むセルの検出は

エクセルVBAでセルに#N/Aのようなエラー値を含む場合Ifを使った構文で制御したいのですが、エラー値であるかどうかを調査するにはどうすれば良いでしょうか。教えてください。

Aベストアンサー

ワークシート関数のISERRORを使えばよいようです。

#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL! のいずれでもTRUEが返ります。

エラーの種類を検出するには、ERROR.TYPE関数を使用します。ただし、ERROR.TYPE関数でエラーのないセルを参照すると、#N/A が返ります。

詳細は、キーワード「エラー」または「IS関数」でヘルプをご参照ください。

VBAを使う場合は、CVErr 関数でエラー値を検出できます。
(詳細は、キーワード「セルのエラー値」で。)

QExel VBA 別ブックから該当データを検索し、必要なデータを取得する方法について

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数ではなく、マクロで処理を希望します。

自分では、部品表の商品番号をコピーして、コード一覧表で検索し、検索結果の右隣のセル(B列のコード)の値を部品表のC列に貼り付ければよいかと思い、書いてみたんですが…

Sub 別ブックから貼り付ける()
  Dim 検索する As Long
Windows("部品表.xls").Activate
検索する = cells(i,2).Value
Windows("コード一覧表.xls").Activate
ActiveWindow.SmallScroll Down:=-3
Selection.AutoFilter Field:=3, Criteria1:="=検索する", Operator:= xlAnd

と、してみたものの、検索しても、その検索結果の隣のセルのコードをどうやって取得すればいいのかが、わかりませんでした。

基本事項は本で学びましたが、呪文のようなコードはよく理解できません。懸命にネットで検索して、訳して理解する努力をしてはいますが。

どうぞよろしくお願いします。

部品表というブックがあります
A列に商品名、B列に商品番号が入力してあります。C列のコードは未入力です。
A列     B列     C列      
商品名  商品番号  コード
モータ  U-1325-L  
ホルダ  R-134256

また、コード一覧表という別のブックには、A列に商品番号と、B列にコードが、何千件も入力されています。

やりたいことは
部品表のC列のコード欄に、コード一覧表ブックから商品番号と一致するコードを貼り付けしたいのです。

部品表は、何百種類もありますので、関数...続きを読む

Aベストアンサー

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks.Open("C:\★★\コード一覧表.xls") '★要変更★
 I = 2
 Do While Range("A" & I).Value <> ""
  ThisWorkbook.Worksheets("Sheet1").Range("C" & I).Value = Application.VLookup(ThisWorkbook.Worksheets("Sheet1").Range("B" & I).Value, xlBook.Worksheets("Sheet1").Range("A2:B65535"), 2, 0)
  I = I + 1
 Loop
 xlBook.Close
 Application.ScreenUpdating = True
 MsgBox ("完了")
End Sub

こんにちは。
とりあえず実用性も踏まえました。
メインの動作はワークシート関数のVLOOKUPをVBA上で使用していますので理解はしやすいかと思います。
また、質問文から察するに「部品表.xls」と「コード一覧表.xls」の両方を開いて処理されていますが「コード一覧表.xls」はプログラム内で開いて閉じているので実行するときは「コード一覧表.xls」は閉じて置いてください。
Option Explicit
Sub Sample()
 Application.ScreenUpdating = False
 Dim I As Long
 Dim xlBook
 Set xlBook = Workbooks....続きを読む

QWorkBooksをオープンさせずにシートにコピーしたい【EXCEL VBA】

よろしくお願いします。
今あるブックにあるシートを別のブックにコピーしたいのですが、今考えているのは

ここから////////
'ブックを開く
Workbooks.Open コピー元のブックのパス
'シートをコピー
Worksheets.Item(コピーするシート名).Copy _
after:=Workbooks(コピー先のブック名).Sheets(1)

'ブックを閉じる
Application.DisplayAlerts = False
Workbooks.Item(コピー元のブック名)Close True
Application.DisplayAlerts = True
ここまで////

なのですが、コピーものとのブックが複数ある時、画面がチラチラしてしまいます。ブックをオープンさせずにシートを他ブックにコピーさせる方法ってないでしょうか。
ご存知の方がいらっしゃいましたら、ご教授お願いします。

Aベストアンサー

画面のチラツキを押さえたいだけなら、画面の更新をやめればいいだけじゃないでしょうか?

ブックを開く前に
Application.ScreenUpdating = False
ブック閉じてから
Application.ScreenUpdating = True

QExcel VBA ExecuteExcel4Macroについて

こんにちは。よろしくお願いします。
あるフォルダ"D:\test"のなかに、4つのxlsファイル"o.xls"、"a.xls"、"b.xls"、"c.xls"があるとします。
使用するシート名は、それぞれo,a,b,c(ファイル名から".xls"を除いたもの)とします。
このとき"o.xls"を開いて、下記のマクロを実行すると、1行目にパス名、2行名にファイル名、3行目以下に(1列目は"a.xls"の、2列目は"b.xls"の、3列目は"c.xls"の)セルA3以下が読み込まれます。
たとえば、結果は添付の図のようになります。図がうまくアップできなかったらごめんなさい。

Sub sample1()
Application.Calculation = xlManual
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Worksheets("o").Cells.Clear
Dim p As String, fn As String, fc As Long, i As Long, j As Long, d, e
p = ActiveWorkbook.Path
fn = Dir(p & "\" & "*.xls", 0)
fc = 0

If fn <> "" Then
fc = fc + 1
For j = 3 To 6
With Worksheets("o")
.Cells(1, fc).Value = p & "\" & fn
.Cells(2, fc).Value = fn
d = ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R" & j & "C1")
If d = 0 Or IsError(d) Then
Exit For
Else
.Cells(j, fc) = d
End If
End With
Next j
End If

Do
fn = Dir()
If fn <> "" Then
fc = fc + 1
For i = 3 To 6
With Worksheets("o")
.Cells(1, fc).Value = p & "\" & fn
.Cells(2, fc).Value = fn
e = ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R" & i & "C1")
If e = 0 Or IsError(d) Then
Exit For
Else
.Cells(i, fc) = e
End If
End With
Next i
Else
Exit Do
End If
Loop
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.Calculation = xlAutomatic
End Sub

上記の例は変数iとjが3から6までしか動きませんし、読み込むxlsファイルも3つしかありませんのですぐに終わりますが、実際には行やファイルがもっとたくさんあり、非常に時間がかかっています。そこで、

ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R" & i & "C1")



e = ExecuteExcel4Macro("'" & p & "\[" & fn & "]" & Mid(fn, 1, Len(fn) - 4) & "'!R3C1:R6C1")

というような風にして、For~Nextも使用せず

.range(Cells(3, fc),cells(6, fc)) = e

というふうに範囲で読み込もうとしたのですがうまくいきません。
ExecuteExcel4Macroは範囲を読み込むことはできないのでしょうか?
何とかして処理速度を上げたいのですが、どうすればよいでしょうか。

こんにちは。よろしくお願いします。
あるフォルダ"D:\test"のなかに、4つのxlsファイル"o.xls"、"a.xls"、"b.xls"、"c.xls"があるとします。
使用するシート名は、それぞれo,a,b,c(ファイル名から".xls"を除いたもの)とします。
このとき"o.xls"を開いて、下記のマクロを実行すると、1行目にパス名、2行名にファイル名、3行目以下に(1列目は"a.xls"の、2列目は"b.xls"の、3列目は"c.xls"の)セルA3以下が読み込まれます。
たとえば、結果は添付の図のようになります。図がうまくアップできなかった...続きを読む

Aベストアンサー

こんにちは。

mitarashiさん、どうもありがとうございます。
今回の件については、私のコードは苦肉の策の内容のようです。

>ExecuteExcel4Macroは範囲を読み込むことはできないのでしょうか?

今回のコードも、INDEX関数で取ることはできないわけではないのですが、本質的には、一つずつ取り出すしかないようですね。

なお、ExecuteExcel4Macroを使うと、使うメリットは、ファイルを開かなくて済むということですが、DAOやADOの方法もあります。開くときのオーバーヘッドが減らせますから、ファイルの数が多ければ多いほど、時間は少なくて済むはすだと思います。

以下のコードは、値自体のエラー値や'0'を取り去ることも出来ませんが、同じ技法を使った、Consolidate という方法があります。少しは、速くなるような気がします。

なお、以下のコードの細かい点は検証されていません。
'-------------------------------------------

Sub TestMacro1()
  Dim p As String
  Dim fn As String
  Dim j As Long
  Const EXT As String = ".xls" '拡張子
  Application.Calculation = xlManual
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  
  p = Application.DefaultFilePath
  
  With Worksheets("o")
    .UsedRange.Clear
    fn = Dir(p & "\" & "*.xls", vbNormal)
    
    Do
      .Cells(1, j + 1).Value = p & "\" & fn
      .Cells(2, j + 1).Value = fn
      
      .Range("A3").Resize(4).Offset(, j).Consolidate Sources:= _
      "'" & p & "\[" & fn & "]" & Replace(fn, EXT, "", 1) & "'!R3C1:R6C1", _
      Function:=xlSum, TopRow:=True, LeftColumn:=False, CreateLinks:=False
      j = j + 1
      fn = Dir()
    Loop While Dir() <> ""
  End With
  Application.ScreenUpdating = True
  Application.DisplayAlerts = True
  Application.Calculation = xlAutomatic
End Sub

こんにちは。

mitarashiさん、どうもありがとうございます。
今回の件については、私のコードは苦肉の策の内容のようです。

>ExecuteExcel4Macroは範囲を読み込むことはできないのでしょうか?

今回のコードも、INDEX関数で取ることはできないわけではないのですが、本質的には、一つずつ取り出すしかないようですね。

なお、ExecuteExcel4Macroを使うと、使うメリットは、ファイルを開かなくて済むということですが、DAOやADOの方法もあります。開くときのオーバーヘッドが減らせますから、ファイル...続きを読む

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QVBA EXCEL 開かずにデータ操作

現在下記のようなコードでテストしています。

Sub Sample()

Dim TargetBook As Workbook

   Set TargetBook = Workbooks.Open("Book2.xls")
   TargetBook.Sheets("Sheet1").Cells(1, 5) = Cells(1, 1)
   TargetBook.Close

End Sub

Book2を開いてセルの読み書きはテストできました。
これをBook2をopenせず閉じた状態で操作したいと思っています。
Workbooksの表示されるメソッドを色々試してみますが出来ません。
OpenDatabaseが使用できるのかと思いますが、出来ません。
ご指導よろしくお願いします。

Aベストアンサー

Sub Sample2()
Dim myPath As String
Dim fn As String
  myPath = Application.DefaultFilePath 'パス
  fn = "Book2.xls" 'ファイル名
  'R1C1型で書く
  ret = Application.ExecuteExcel4Macro("'" & myPath & "[" & fn & "]Sheet1'!R1C1")
  ThisWorkbook.Sheets("Sheet1").Cells(1, 5) = ret
End Sub

他にも、
>OpenDatabaseが使用できる
ODBC(Open Database Connectivity)という意味でしたら、[外部データの取り込み]から操作します。ただし、その使用する列全体を使用してしまいますので、取り込みには、その以下にデータを置くことは出来ない欠点があります。

Office をインストールしていれば、Jet はインストールしていますから、当然、ADODBなどは利用できますが、意外に面倒かもしれません。フィールドがなくても取得できます。

Sub Sample2()
Dim myPath As String
Dim fn As String
  myPath = Application.DefaultFilePath 'パス
  fn = "Book2.xls" 'ファイル名
  'R1C1型で書く
  ret = Application.ExecuteExcel4Macro("'" & myPath & "[" & fn & "]Sheet1'!R1C1")
  ThisWorkbook.Sheets("Sheet1").Cells(1, 5) = ret
End Sub

他にも、
>OpenDatabaseが使用できる
ODBC(Open Database Connectivity)という意味でしたら、[外部データの取り込み]から操作します。ただし、その使用する列全体を使用してしまいますので、取り込み...続きを読む

QExcel VBAのApplication.ExecuteExcel4Macro

こんにちは。
Excel VBAでファイル間集計のマクロを作りました。
変数MyStrに指定のパスとファイル名を代入するようにしてあります。
Application.ExecuteExcel4Macro(MyStr)
を実行し指定のパスにファイル名が実在すれば、動作は上手くいきます。
ただし、指定のパスにファイルが存在しない場合、ファイル検索のダイアログが出てしまい、強制終了すれば、実行時エラー2023になってしまいます。
これを回避し、「該当のファイルが見つかりません」とメッセージを出したいのですが、IF文にどのように書けばいいのか分かりません。

参考サイトでも、構いませんので皆さんの知恵を貸して下さい。
よろしくお願いします。

Aベストアンサー

Dir() 関数でチェックしたらいかがですか?

http://officetanaka.net/excel/vba/file/file06.htm


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング