其他语句导致运行时错误

时间:2018-03-06 20:37:17

标签: excel vba

我正在编写我的第一个VBA代码并得到一个我无法跟踪的奇怪错误。

如果另一个小区(C15)等于" No"我只是尝试为某些小区分配值。并将这些单元格的值设置为"其他"如果C15有任何其他价值。

如果我注释掉其他部分,则会有效,但会失败并说

  

"方法'范围'对象' _Worksheet'失败"

然后Excel崩溃。

非常感谢任何帮助。

Option Explicit
Public Sub_Contractor_Target As Range
Public Sub_Contractor_Target_Value As String
Public SC_Option3 As String


Sub SetTarget()
    Set Sub_Contractor_Target = Worksheets("Menu").Range("C15")
    Set Sub_Contractor_Target_Value = Sub_Contractor_Target.Value
End Sub




'Set Sub Contractor Section to Option 3
Private Sub worksheet_change(ByVal Sub_Contractor_Target As Range)
SC_Option3 = Worksheets("Options").Range("D27").Value
'MsgBox (Sub_Contractor_Target)
If Sub_Contractor_Target.Value = "No" Then

   Worksheets("Menu").Range("C55") = SC_Option3
   Worksheets("Menu").Range("C56") = "Low"

Else
   Worksheets("Menu").Range("C55,C56").Value = "Other"
End If
End Sub

2 个答案:

答案 0 :(得分:2)

你的Else进入一个连续的重新触发循环。通过worksheet_change事件写入同一工作表时禁用事件。

'Set Sub Contractor Section to Option 3
Private Sub worksheet_change(ByVal Sub_Contractor_Target As Range)
    On Error GoTo safe_exit
    SC_Option3 = Worksheets("Options").Range("D27").Value
    'MsgBox (Sub_Contractor_Target)
    Application.EnableEvents = False
    If Sub_Contractor_Target.Value = "No" Then

       Worksheets("Menu").Range("C55") = SC_Option3
       Worksheets("Menu").Range("C56") = "Low"

    Else
       Worksheets("Menu").Range("C55,C56").Value = "Other"
    End If
safe_exit:
    Application.EnableEvents = True
End Sub

答案 1 :(得分:0)

我认为您不需要大部分代码(公共变量,SetTarget sub)

尝试将以下内容仅放在"菜单"工作表代码窗格

Option Explicit
Private Sub worksheet_change(ByVal Target as Range)
    If Target.Address <> "$C$15" Then Exit Sub
    On Error GoTo ExitSub
    Application.EnableEvents = False
    If Range("C15").Value = "No" Then
        Range("C55") = Worksheets("Options").Range("D27").Value
        Range("C56") = "Low"
    Else
        Range("C55,C56").Value = "Other"
    End If
ExitSub:
    Application.EnableEvents = True
End Sub