Excel,工作表\u未定义子项或函数
我试图创建一段代码,当另一个单元格发生变化时,它会重置一个单元格。有三个下拉单元格,每个单元格都依赖于该单元格,然后B3依赖于B2,B4依赖于B3和B2 所以,如果有人设置了B4,然后更改了B2,则会出现无效组合。因此,如果更改了上面的单元格值,则将强制下面的单元格为默认值,如果B1为值2时B4只能为值3,则如果B1更改为值1,则B4强制为值1 我现在使用的代码是:Excel,工作表\u未定义子项或函数,excel,vba,ms-office,Excel,Vba,Ms Office,我试图创建一段代码,当另一个单元格发生变化时,它会重置一个单元格。有三个下拉单元格,每个单元格都依赖于该单元格,然后B3依赖于B2,B4依赖于B3和B2 所以,如果有人设置了B4,然后更改了B2,则会出现无效组合。因此,如果更改了上面的单元格值,则将强制下面的单元格为默认值,如果B1为值2时B4只能为值3,则如果B1更改为值1,则B4强制为值1 我现在使用的代码是: Private Sub Worksheet_Change(ByVal Target As Range) If Not In
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为其默认值,但我得到一个编译错误子或函数未定义
我真的不知道是什么原因造成的。M$help说这是因为子过程拼写错误,但我复制了一些代码,并对照许多源代码进行了检查。您使用的是工作表而不是工作表
通过使用Sheet,编辑器认为您正在寻找一个名为Sheet的新函数,但由于它不是VBA定义的函数,因此在任何地方都找不到该函数,因此它会给出该错误
此外,您可能希望在human、侏儒等周围使用,除非在某些地方定义了它们
最后,我强烈建议您在每个模块的顶部使用Option Explicit,因为这将有助于防止许多错误,例如人类矮人文本不属于这种类型。您使用的是工作表而不是工作表
通过使用Sheet,编辑器认为您正在寻找一个名为Sheet的新函数,但由于它不是VBA定义的函数,因此在任何地方都找不到该函数,因此它会给出该错误
此外,您可能希望在human、侏儒等周围使用,除非在某些地方定义了它们
最后,我强烈建议在每个模块的顶部使用Option Explicit,因为这将有助于防止许多错误,例如人类矮人文本不属于这种类型。除了enderland所涵盖的内容外,还有三件事 您不需要图纸名称。据了解,代码将在当前工作表上运行 无论何时使用工作表\u更改事件。如果要将数据写入单元格,请始终关闭事件。这是必需的,这样代码就不会进入可能的无限循环 无论何时关闭事件,请使用错误处理,否则如果出现错误,代码将不会在下次运行 这里有一个例子
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
除了安德兰所涵盖的内容外,还有三件事 您不需要图纸名称。据了解,代码将在当前工作表上运行 无论何时使用工作表\u更改事件。如果要将数据写入单元格,请始终关闭事件。这是必需的,这样代码就不会进入可能的无限循环 无论何时关闭事件,请使用错误处理,否则如果出现错误,代码将不会在下次运行 这里有一个例子
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
除非人类、战士等是变量,它们应该用引号括起来。同意-你需要把它们用引号括起来。除非人类、战士等是变量,它们应该用引号括起来。同意-你需要把它们用引号括起来。非常感谢。床单的事情对我来说是一个愚蠢的错误,我做了记录,并在所有的值中添加了引号。另外,optionexplicit也在那个模块上,但我会把它添加到所有模块中。非常感谢。床单的事情对我来说是一个愚蠢的错误,我做了记录,并在所有的值中添加了引号。另外,Option Explicit位于该模块上,但我会在遍历时将其添加到所有模块中。我认为它会进入循环,但我认为Excel可能会自动停止循环代码,但我会添加它以防万一。谢谢。我有点认为它会进入循环,但我想Excel可能会自动停止循环代码,但我会添加它以防万一。非常感谢。