2017-02-25 1 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"가 완료되지 않으면 오류가 나타납니다. 나는 워크 시트가 발견되지 않을 때 정의되지 않는 변수 (chkSalFile 하위) 아래에 çhksalsheet가 있다고 생각한다. – 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 
관련 문제