简单,如下:VBA在重复申报“如果...否则”
If 1 = 2 Then
Dim i As Integer
Else
Dim i As Integer
End If
这会给一个错误“在当前范围内重复声明”。为什么?
简单,如下:VBA在重复申报“如果...否则”
If 1 = 2 Then
Dim i As Integer
Else
Dim i As Integer
End If
这会给一个错误“在当前范围内重复声明”。为什么?
变量是子/函数(过程)的本地变量。在你的情况下,“当前范围”。 VB,VBA和VBScript在程序中没有代码块的概念。如果我没有记错,唯一的代码块是模块,类,表单(它们是类)和过程。
为方便起见,您可以在过程的任何位置声明变量。然而,“当前范围”是程序。
这是一个设计决定,使语言更容易使用B-创始人。在当前范围
指定的名称
重复申报已经被使用在这个级别的范围。例如,对于 示例,如果两个变量在 不同的过程中定义,则它们可以具有相同的名称,但如果它们在相同的 过程中定义,则它们的名称不能相同。
在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
如前所述,对于具有相同范围的变量,您不能有多个Dim语句。除此之外,然而,你为什么想?以你的代码为例。
If 1 = 2 Then
Dim i As Integer
Else
Dim i As Integer
End If
条件块的用途是在两种不同的情况下执行两段不同的代码。如果您以任一方式声明相同的变量,则根本不需要条件块。很有可能,它应该在条件式之前移动。
因为您在相同范围内复制了声明。 VBA中的if块不会创建局部范围。 – JohnFx 2012-02-22 04:38:23
@ user614244如果答案解决了您的问题,您应该通过单击刻度标记来接受答案。 – Fionnuala 2012-02-22 09:56:15