2017-01-03 9 views
0

エラー処理(オンエラーなし...またはGoTo !!!!)を使用しない場合は、使用する方法はありますか?if ... then VBAでのエラー処理

私は以下のコードを持っていますが、ifステートメントでスタックしています。

Sub test() 

      If IsError(Workbooks.Open("C:\Users\Desktop\Test\journals.xlsx")) = True Then 

       'Do something 

      End If 

    End Sub 

ありがとうございます!

+0

可能な複製(http://stackoverflow.com/questions/1038006/good-patterns- for-vba-error-handling) – vacip

+0

On Errorステートメントなしで解決したいと思っていました。 – Vinnie

+0

VBAでのエラー処理は、On Errorステートメントで行われます。期間。場合によっては、問題の特定の解決策を見つけることができます。誤解を招く可能性があるため、タイトルを変更する必要があるかもしれません。これはエラー処理ではなく、ファイルが存在するかどうかを確認することです。 (どちらの質問にもここに10000答えがあります...) – vacip

答えて

4

あなたはDir()機能を使用することができます

If Dir("C:\Users\Desktop\Test\journals.xlsx") = "" Then 
    'do something 
Else 
    Workbooks.Open "C:\Users\Desktop\Test\journals.xlsx" 
End If 
+0

これは完璧です、ありがとう! – Vinnie

+0

ようこそ。あなたは受け入れられたとして回答をマークしたいかもしれません。ありがとうございました! – user3598756

3

エラー処理をオフにしてから、ブックを開くときにエラー番号が生成されたかどうかを確認できます。

Dim wb As Workbook 

On Error Resume Next 

Set wb = Workbooks.Open("C:\Users\Desktop\Test\journals.xlsx") 

If Err.Number > 0 Then 

    '' there was an error with opening the workbook 

End If 

On Error GoTo 0 

編集1:あなたはすでに、なぜそれの機能を使用しないで、直接wbオブジェクトに設定し、きれいにそうしているので?

If wb Is Nothing Then 
+1

代替案を提供することを許可します。 –

2

最も簡単な答えはありません、あなたが、何らかの形でのエラーで使用しますと予想されます、次のいずれかです。

On error resume next 
Workbooks.Open("C:\Users\Desktop\Test\journals.xlsx") 
If Err.Number <> 0 then 
' the workbook is not at that location 
Err.Clear 
On Error Goto 0 
End If 

かで

従来のエラーハンドラ:

errhandler: 

If Err.Number <> 0 then 
    If Err.Number = 1004 Then 
     ' the workbook is not at that location, do something about it, then resume next 
    End If 
End If 

ただし、ファイルが存在するかどうかをテストするFileSystemObjectを使用することができます:[VBAエラー処理のために良いパターン]の

Dim fso As Object 

Set fso = CreateObject("Scripting.FileSystemObject") 
fileExists = fso.fileExists("C:\Users\Desktop\Test\journals.xlsx") 
関連する問題