Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel,工作表\u未定义子项或函数_Excel_Vba_Ms Office - Fatal编程技术网

Excel,工作表\u未定义子项或函数

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

我试图创建一段代码,当另一个单元格发生变化时,它会重置一个单元格。有三个下拉单元格,每个单元格都依赖于该单元格,然后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 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可能会自动停止循环代码,但我会添加它以防万一。非常感谢。