Excel,WorkSheet_Change给出Sub或Function未定义

时间:2012-10-02 14:41:19

标签: excel vba ms-office

我正在尝试创建一些代码,以便在另一个单元格发生更改时重置单元格。有三个下拉单元格,每个单元格依赖于它之前的单元格(B3依赖于B2,B4依赖于B3和B2)。

所以,如果某人设置B4,然后更改B2,则会出现无效组合。因此,如果更改上面的单元格值,它将强制下面的单元格为默认值(如果B1为值2时B4只能为值3,则如果B1更改为值1,则B4强制为值1)< / p>

我现在使用的代码是:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Target.Worksheet.Range("B2")) Is Nothing Then
    If Sheet("Talent Sheet").Range("B2") = Human Then
        Sheet("Talent Sheet").Range("B3") = Warrior
        Sheet("Talent Sheet").Range("B4") = "Human Noble"
    Else
        If Sheet("Talent Sheet").Range("B2") = Elf Then
            Sheet("Talent Sheet").Range("B3") = Warrior
            Sheet("Talent Sheet").Range("B4") = "City Elf"
        Else
            If Sheet("Talent Sheet").Range("B2") = Dwarf Then
                Sheet("Talent Sheet").Range("B3") = Warrior
                Sheet("Talent Sheet").Range("B4") = "Dwarf Commoner"
            End If
        End If
    End If

当B2改变时,这会强制B3和B4为默认值,但是我得到一个编译错误“Sub or Function is not defined”

老实说,我不知道造成这种情况的原因。 M $帮助说这是因为子程序拼写错误,但是我已经复制了一些代码并针对很多来源进行了检查。

2 个答案:

答案 0 :(得分:8)

您使用Sheet代替Sheets

通过使用Sheet编辑器认为您正在寻找一个名为Sheet的新函数,并且无法在任何地方找到它(因为它不是VBA定义的函数),因此它会给出该错误。< / p>

此外,您可能希望在"human等处使用Dwarf,除非在某处定义了这些内容。

最后,我强烈建议您在每个模块的顶部使用Option Explicit,因为这有助于防止出现许多错误(例如Human {{1}这个文本不在Dwarf)中。

答案 1 :(得分:2)

除了恩德兰所涵盖的三件事之外。

  1. 您不需要工作表名称。据了解,该代码将在当前表格上运行

  2. 每当您处理Worksheet_Change事件时。如果要将数据写入单元格,请始终关闭事件。这是必需的,以便代码不会进入可能的无限循环

  3. 每当您关闭事件时,请使用错误处理,否则如果收到错误,代码将无法在下次运行。

  4. 这是一个例子

    Option Explicit
    
    Private Sub Worksheet_Change(ByVal Target As Range)
        On Error GoTo Whoa
    
        Application.EnableEvents = False
    
        '
        '~~> Rest of the code
        '
    
    LetsContinue:
        Application.EnableEvents = True
        Exit Sub
    Whoa:
        MsgBox Err.Description
        Resume LetsContinue
    End Sub