Я работаю над этим кодом, когда пользователь вводит значение в целевом диапазоне, программа проверяет наличие имени листа и реагирует соответствующим образом.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
Я еще не тестировал ваш код, но, просто увидев выше, удалите свое «on error resume next», эта строка в основном скрывает ваши потенциальные ошибки в коде. Подтвердите свое значение в C3 (проверьте, скопировав значение из C17). Также я использовал бы «sht» вместо «sheet» в качестве имени переменной, чтобы избежать путаницы. – Alex
Лист не был определен как рабочий лист. Код «Dim Sheet, Sheet1 As Worksheet» устанавливает только Sheet1 в тип листа. Вам нужен «Dim Sheet As Worksheet, Sheet1 As Worksheet». – OpiesDad