我正在编写我的第一个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
答案 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