简单如下:
If 1 = 2 Then
Dim i As Integer
Else
Dim i As Integer
End If
这将给出错误“当前范围内的重复声明”。为什么呢?
答案 0 :(得分:8)
变量是子/函数(过程)的本地变量。在您的情况下,“当前范围”。 VB,VBA和VBScript在过程中没有代码块的概念。如果我没记错的话,唯一的代码块是模块,类,表单(类)和过程。
为方便起见,您可以在过程中的任何位置声明变量。然而,“当前范围”是程序。
这是一个设计决策,使语言更容易用于 B - 获胜者。
当前范围内的重复声明
插入指定的名称已在此范围内使用。对于 例如,如果定义了两个变量,则它们可以具有相同的名称 不同的程序,但如果它们在同一程序中定义则不会 过程
答案 1 :(得分:1)
在VBA中,无法在同一过程中声明具有相同名称的两个变量。有关详细信息,请参阅此文章:Duplicate declaration in current scope。
在您的情况下,“当前范围”是当前程序。 if
和else
块共享相同的范围。
例如,即使第二个声明无法访问,以下内容也会出现相同的错误:
Sub ErrorSub()
Dim i As Integer
If False Then
Dim i As Integer
End If
End Sub
但以下内容完全有效,并且可以正常使用:
Sub MySub()
Dim i As Integer
i = 4
MsgBox i
End Sub
Sub MyOtherSub()
Dim i As Integer
i = 3
MsgBox i
End Sub
Sub CallSubs()
MySub
MyOtherSub
End Sub
答案 2 :(得分:0)
如上所述,对于具有相同范围的变量,不能有多个Dim语句。除此之外,你为什么要这样做?以你的代码为例。
If 1 = 2 Then
Dim i As Integer
Else
Dim i As Integer
End If
条件块的目的是在两种不同的情况下执行两段不同的代码。如果要以任一方式声明相同的变量,则根本不需要条件块。很有可能,它应该在条件之前移动。