为什么VBA说它找到了一个';名称不明确';?
在编译某些代码(如下所示的声明)时,我会收到错误消息“Compile error:检测到不明确的名称”。“六桌”。我看了这里和其他地方,但找不到任何符合我的问题。导致此错误的最常见原因是,声明两个名称相同的变量,或为函数及其调用源赋予相同的名称,这些都不适用。是的,我知道我可以把名字改成系统满意的名字,但是(1)我不知道我做错了什么,(2)我选择这个名字是有原因的——它完全符合它的目的:-) 编辑:我很尴尬,几乎无法解释问题出在哪里。我知道我没有复制一个名字,因为我只使用了一次——作为一个函数!谢谢大家的帮助,我现在要去掩面了…来自MSDN:为什么VBA说它找到了一个';名称不明确';?,vba,excel,Vba,Excel,在编译某些代码(如下所示的声明)时,我会收到错误消息“Compile error:检测到不明确的名称”。“六桌”。我看了这里和其他地方,但找不到任何符合我的问题。导致此错误的最常见原因是,声明两个名称相同的变量,或为函数及其调用源赋予相同的名称,这些都不适用。是的,我知道我可以把名字改成系统满意的名字,但是(1)我不知道我做错了什么,(2)我选择这个名字是有原因的——它完全符合它的目的:-) 编辑:我很尴尬,几乎无法解释问题出在哪里。我知道我没有复制一个名字,因为我只使用了一次——作为一个函数!
我曾经多次遇到过这个问题,但我并不完全理解其中的原因,我认为我已经测试了一个重要的事实,有人可以证实这一点。这对专业程序员来说可能是显而易见的,但我把它放在这里是为了那些在讨论中寻求这些答案的人,他们通常不是专业程序员 在sub()中声明的变量在该sub()执行之前不会被“声明”(内存分配)。当sub()的执行完成时,内存被释放。到目前为止,我认为公共变量的作用方式类似;可用于任何使用它的模块,但仅在声明它们的模块仍在执行时才存在 但是,对于工作簿中任何模块中声明行的任何公共变量,该变量在工作簿中任何模块执行时声明并可用,,即使从未调用或执行存在公共声明的模块 因此,如果在一个模块中有一个公共变量声明,然后又在计划独立于第一个模块运行的单独模块中,Excel仍然会看到同一个变量的两个声明,因此它是不明确的 为了证明这一点,您可以在工作簿项目中创建一个空白模块,并且除了两行公共声明之外,不添加任何内容
作为字符串的公共变量X 作为整数的公共变量
这些变量将在整个项目中声明并可用,对于任何执行的sub()。这一事实也可能是关于尽量减少使用公共变量的提示的原因
同样,这可能是专业程序员的幼稚园级信息,但大多数都不是专业人士,必须通过艰苦的方式或通过类似这样的讨论板来学习这些课程。我希望这有助于其他人。我假设更改名称确实可以解决您的帖子中的问题?您是否有使用该名称的代码模块?显然,从您提供的代码中,我们可以很容易地看出没有问题。您需要提供更多的代码和可能的所有组合,即模块名称、子名称、函数名称等。使用CTRL+F扫描代码并搜索
SixTables
Keiran。但是我没有其他同名的东西。你能用一个新项目重复这个问题吗?两年后,这个解决方案真的帮了我的忙。感谢您花时间回复。
Option Explicit
Dim ArmOfService As Byte
Dim CharacterNumber As Long
Dim CurrentTerm As Byte
Dim DecorationRollMade As Byte
Dim DecorationRollNeeded As Byte
Dim DiceSize As Byte
Dim GenAssignment
Dim GenAssignmentSwitchInt As Byte
Dim GenAssignmentSwitchOff As Byte
Dim iLoopControl
Dim jLoopControl
Dim kLoopControl
Dim LineIncrement As Integer
Dim lLoopControl
Dim Merc(100)
Dim NoOfDice As Byte
Dim OfficerPromotion(63 To 78) As Byte
Dim PromotionRollMade As Byte
Dim PromotionRollNeeded As Byte
Dim Roll As Byte
Dim SkillColumn
Dim SixTables
Dim SpecAssignmentSwitchEnd As Byte
Dim SurvivalRollMade As Byte
Dim SurvivalRollNeeded As Byte
Dim TechLevel As Byte
Dim Temp As Integer
Dim Term As Byte
Dim TestCount
Dim UnitAssignment
Dim WhichTable
Dim Year As Byte
Dim MyID As String
Sub MySub
MyModule.MyID = "This is module-level variable"
Dim MyID As String
MyID = "This is the procedure-level variable"
Debug.Print MyID
Debug.Print MyModule.MyID
End Sub
Public MyID
Sub MyID
. . .
End Sub