簡體   English   中英

VBA 運行時錯誤“1004”:object“_Worksheet”的方法“范圍”

[英]VBA Run-time error '1004': Method 'Range' of object '_Worksheet'

我知道這個問題與 Stack 上發布的許多其他問題相似,但他們的解決方案都不適合我。 我是 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 上的任何單元格值時都會提示“獲取運行時 1004:object '_Worksheet' 的方法'范圍'失敗”,而沒有指定哪一行代碼,然后強制退出程序。 請參閱此處的表格。 任何幫助是極大的贊賞!

我發現我在使用

Private Sub Worksheet_Change(ByVal Target As Range)

在不使用 intersect() 的情況下,我本質上是在處理一個不存在的范圍。 簡單的修復如下:

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

之后,打開和關閉事件變得相關,以防止在更改選定單元格的值時出現無限循環。 感謝您的提示!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM