2015-04-06 3 views
2

Я работаю над этим кодом, когда пользователь вводит значение в целевом диапазоне, программа проверяет наличие имени листа и реагирует соответствующим образом.vba проверить, существует ли файл - ошибка объекта

У меня есть следующий код, вторая часть (Cell C17) работает нормально, но эта строка в первой части (ячейка C3) If Not Sheet Is Nothing Then вызывает ошибку, требуемую объектом. Я смотрю на код в режиме отладки и обнаружил, что значение листа пусто, а sheet1 - ничто. Логика для двух частей точно такая же, поэтому я смущен тем, почему первая ячейка не работает. Может ли кто-нибудь указать мне на меня, пожалуйста? Благодарю.

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim rp, rp1 As String 
Dim Sheet, Sheet1 As Worksheet 

    rp = ThisWorkbook.Sheets("Settings and Instruction").Range("C3").Value 
    rp1 = ThisWorkbook.Sheets("Settings and Instruction").Range("C17").Value 


    On Error Resume Next 
    Set Sheet1 = Worksheets(rp1) 
    On Error GoTo 0 

    On Error Resume Next 
    Set Sheet = Worksheets(rp) 
    On Error GoTo 0 

    If Target.Address = "$C$3" Then 


      If Not Sheet Is Nothing Then 

      MsgBox "Sheet name already exists, please enter a new period." 
      Else 
      ConfirmPeriodNew.Show 
      End If 


    ElseIf Target.Address = "$C$17" Then 

      If Not Sheet1 Is Nothing Then 
      ConfirmPeriodUp.Show 
      Else 
      MsgBox "The period you've entered doesn't exist, please double check" 
      End If 

    End If 

End Sub 
+2

Я еще не тестировал ваш код, но, просто увидев выше, удалите свое «on error resume next», эта строка в основном скрывает ваши потенциальные ошибки в коде. Подтвердите свое значение в C3 (проверьте, скопировав значение из C17). Также я использовал бы «sht» вместо «sheet» в качестве имени переменной, чтобы избежать путаницы. – Alex

+0

Лист не был определен как рабочий лист. Код «Dim Sheet, Sheet1 As Worksheet» устанавливает только Sheet1 в тип листа. Вам нужен «Dim Sheet As Worksheet, Sheet1 As Worksheet». – OpiesDad

ответ

3

Проблема такая, о чем я упоминал в своем комментарии. Лист определяется как вариант, поэтому при запуске кода он не устанавливается как объект. Установка «Лист» вызывает ошибку (поскольку рабочий лист не существует), но поскольку тип листа является вариантом, его значение равно Пустом, а не «Ничто», которое вы позже проверяете.

Dim rp As String, rp1 As String 
Dim Sheet As Worksheet, Sheet1 As Worksheet 

Это исправит проблему, с которой вы сталкиваетесь.

+0

Большое спасибо! Похоже, я ошибался, чтобы определить переменные какое-то время. – qshngv

Смежные вопросы