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

マクロを実行する同じフォルダ内にある「TEST.xlsx」を開いて、
その「TEST.xlsx」に存在するワークシート「TEST1」を、マクロを実行している
エクセルに移動して、TEST.xlsxを閉じた後に「処理1」の処理を進める構文を
作成しました。

Workbooks.Open Filename:=PASS & "\TEST.xlsx"
Sheets("TEST1").Move After:=wb.Sheets(1)
Workbooks("TEST.xlsx").Close SaveChanges:=False
処理1
End Sub

※PASSには、マクロを実行するファルダパスが格納されています。
 wbには、マクロを実行しているブック名が格納されています。

「TEST.xlsx」が存在しない場合、もしくはワークシート「TEST1」が存在しない場合、
「処理1」を実行せずに別の「処理2」を実行して終了させたいのですが、
どのようにすればいいかご教授頂けないでしょうか?
もちろんどちらも存在する場合は「処理1」を実行して終了となります。

IF文やON ERR等でやれば良いのかと思うのですが、上記構文からどのようにそれを組み込めば
良いのかよくわからず質問させていただきました。
VBA初心者で申し訳ございませんがよろしくお願いいたします。

A 回答 (3件)

* web を自ブック(ThisWorkbook)にしました。


なお、PASS は、PATH のことだと思います。末尾に、\ に置くようにしてください。
こういうスタイルのものは、なかなか難しいです。

-------------------------
''Option Explicit
Sub TestOpenBK()
 Dim wb As Workbook
 Dim wb2 As Workbook
 Dim dummy As Variant
 Dim iflg As Integer
 Const PASS As String = "D:\"  'こちらがわに、パスセレクター(\)を置くようにしましょう。
 Set wb = ThisWorkbook '*

 If Dir(PASS & "TEST.xlsx") <> "" Then
  Set wb2 = Workbooks.Open(Filename:=PASS & "TEST.xlsx")
 Else
  iflg = 1
  GoTo ErrHandler
 End If

 On Error Resume Next
 dummy = wb2.Worksheets("TEST1").Range("A1").Value
 If Err.Number <> 0 Then
  iflg = 2
  GoTo ErrHandler
 End If
 On Error GoTo 0
 wb2.Sheets("TEST1").Move After:=wb.Sheets(1)
 wb2.Close False 'ここで保存せずに終了
 Exit Sub
ErrHandler:
 Dim msg As String
 If Not wb2 Is Nothing Then
  wb2.Close False
 End If
 If iflg = 1 Then
  msg = "ファイルが見つかりません。"
 ElseIf iflg = 2 Then
  msg = "シートが見つかりません。"
 End If
 MsgBox msg, vbExclamation
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
意図通りの対応がすることが出来ました。

お礼日時:2019/08/14 09:45

すみません、resume は不要ですね。

 

解決しなければ、ステップインでデバッグして、どういう順番で実行され、どこでエラーが起きているのか調べてみてください。
https://www.239-programing.com/excel-vba/basic/b …
このやり方を覚えれば、自己解決能力が一気に高まります。
    • good
    • 0
この回答へのお礼

ありがとうございます。
№1でご教授頂いた内容の場合、「ファイル処理」時だけでなく、「処理1」中にもしエラーが発生しても
hogehoge:に飛んでしまう結果になるので悩んでいました。

お礼日時:2019/08/14 09:43

private sub xxx


もろもろ
on error goto hogehoge
ファイル処理
resume
処理1
exit sub
hogehoge:
処理2
end sub

のような形でエラ―トラップして処理を分岐させてください
    • good
    • 0
この回答へのお礼

ありがとうございます。
「ファイル処理」のところで、何もエラーが起こっていないのに、
hogehoge:に飛んでしまいました。
(試しに「ファイル処理」箇所を全部マスクしてみましたが、同じく
hogehoge:に飛んでしまいます。)

お礼日時:2019/08/13 18:04

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