2017-02-25 14 views
1

「Test_Worksheet」ワークシートがダイアログで開かれたブックファイルに存在するかどうかを確認しながら、コードが正常に実行されています。ブックファイルが正しく開きます& "Test_Worksheet"シートがそのファイルに存在する場合、Debug.print(Sub ChkSalfile内)に "Name is True"と表示されます。サブスクリプションが範囲外になるエラー

シートがワークブックにない場合は、「サブスクリプションが範囲外です」というエラーが表示されます。助けてください。私のコードは以下の通りです

Sub Main() 

    Dim salefor As Workbook 
    Dim salpathfileName As String, salfileName As String 
    Dim fd As Office.FileDialog 

    Set fd = Application.FileDialog(msoFileDialogFilePicker) 

    With fd 
     .AllowMultiSelect = False 
     .Title = "Please select file." 
     .Filters.Clear 
     .Filters.Add "Excel 2003", "*.xls?" 
     .InitialFileName = "*SAL*.*" 

     result4 = .Show 

     If (result4 <> 0) Then 
      salfileName = Dir(.SelectedItems(1)) 
      salpathfileName = .SelectedItems(1) 
     Else 
      'if user pressed CANCEL - exit sub 
      Application.ScreenUpdating = True 
      MsgBox "User pressed CANCEL" 
      Exit Sub 
     End If 
    End With 

    Set salefor = Workbooks.Open(salfileName, ReadOnly:=True) 

    Call ChkSalfile(salfileName, salefor) 

End Sub 


Sub ChkSalfile (salfileName As String, salefor As Workbook) 

    Dim chksalsheet As String 

    chksalsheet = DoesWorkSheetExist("Test_Worksheet", salfileName) 
    If chksalsheet = True Then 
     Debug.Print "Name is " & chksalsheet 
    Else 
     Debug.Print "File not found" 
    End If 

End Sub 


Option Explicit 

Public Function DoesWorkSheetExist(WorkSheetName As String, Optional WorkBookName As String) 

    Dim WS As Worksheet 

    On Error Resume Next 
    If WorkBookName = vbNullString Then 
     Set WS = Sheets(WorkSheetName) 
    Else 
     Set WS = Workbooks(WorkBookName).Sheets(WorkSheetName) 
    End If 
    On Error GoTo 0 

    DoesWorkSheetExist = Not WS Is Nothing 

End Function 
+0

"エラー? – user3598756

+0

"Test_worksheet"が完了していないとエラーが表示されます。私は、ワークシートが見つからないときにçhksalsheet(chkSalFileサブ)変数が定義されていないと思います。 – vts

+0

どのラインがそのエラーを投げていますか?エラーメッセージボックスの「デバッグ」ボタンをクリックすると、強調表示されている行に移動します – user3598756

答えて

0

VBAプロジェクトエディタの設定は、エラーが発生した場合に破損するように設定されているようです。唯一の未処理のエラーでブレークするには、この設定を変更しますと

Tools --> Options --> General Tab --> Error Trapping --> check "Break on Unhadled Errors" 

は、StringとしてではないDimあなたの変数を行うことがBooleanあるとき:その行範囲外の」サブスクリプションを投げている

Dim chksalsheet As Boolean ' <-- Not as String 
関連する問題