Ошибка выполнения VBA '1004': метод 'Range' объекта '_Worksheet' - PullRequest
0 голосов
/ 11 апреля 2020

Я знаю, что этот вопрос похож на многие другие, опубликованные в стеке, но ни одно из их решений не помогло мне. Я новичок в VBA, поэтому, пожалуйста, постарайтесь сделать ваше решение простым для понимания. Приведенный ниже код по существу условно блокирует и разблокирует ячейки (еще не сделано; все еще пытаюсь отключить структуру):

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Sheet1.Protect UserInterFaceOnly:=True
    ' Volatility
    If Not IsEmpty(Range("B11").Value) Then
        Range("B12").Value = ""
        Range("B13").Value = ""
        Range("B22").Value = Range("B11").Value
        Range("B12:B13").Locked = True
    Else
        Range("B12:B13").Locked = False
    End If
    If IsEmpty(Range("B12").Value) And IsEmpty(Range("B13").Value) Then
        Range("B11").Locked = False
    Else
        Select Case Range("B12").Value
            Case Is = "Daily"
                Range("B22").Value = Range("B13").Value * Sqr(252)
            Case Is = "Weekly"
                Range("B22").Value = Range("B13").Value * Sqr(52)
            Case Is = "Monthly"
                Range("B22").Value = Range("B13").Value * Sqr(12)
            Case Is = "Annual"
                Range("B22").Value = Range("B13").Value
        End Select
        Range("B11").Locked = True
    End If
    ' Time
    If Not IsEmpty(Range("B14").Value) Then
        Range("B15").Value = ""
        Range("B15").Locked = True
        Range("B23").Value = Range("B14").Value / Range("B7").Value
    Else
        Range("B15").Locked = False
    End If
    If Not IsEmpty(Range("B15").Value) Then
        Range("B14").Locked = True
        Range("B23").Value = Range("B15").Value
    Else
        Range("B14").Locked = False
    End If
    ' Dividends
    If Not IsEmpty(Range("B16").Value) Then
        Range("B17").Value = ""
        Range("B17").Locked = True
    Else
        Range("B17").Locked = False
    End If
    If Not IsEmpty(Range("B17").Value) Then
        Range("B16").Locked = True
    Else
        Range("B16").Locked = False
    End If


    Select Case Range("B6").Value
        Case Is = "Cox Rox Rubinstein (1979)"
        ' If requirements satisfied, populate outputs
        ' Else make output values blank
            Range("B24").Value = ""
        Case Is = "Forward Tree"
            Range("B24").Value = ""
        Case Is = "Lognormal Tree"
            Range("B24").Value = ""
        Case Is = "Custom"
            Range("B24").Value = ""
    End Select

End Sub

Проблема заключается в том, что каждый раз, когда я изменяю любое значение ячейки на листе, Excel предлагает «Начало работы». -time 1004: метод «Диапазон» объекта «_Worksheet« не удалось »без указания какой строки кода, а затем принудительно завершает работу программы. Смотрите лист здесь . Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 11 апреля 2020

Я понял, что я в корне ошибся при использовании

Private Sub Worksheet_Change(ByVal Target As Range)

Без использования intersect () я, по сути, обращаюсь к диапазону, который не существует. Простое исправление заключается в следующем:

If Not Intersect(Target, Range("B2")) Is Nothing Then

После чего включение и выключение событий становится актуальным, чтобы предотвратить бесконечные циклы при изменении значений выбранных ячеек. Спасибо за советы!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...