VBA在“if ... else”中重复声明

时间:2012-02-22 04:12:19

标签: vba

简单如下:

If 1 = 2 Then
    Dim i As Integer  
Else
    Dim i As Integer
End If

这将给出错误“当前范围内的重复声明”。为什么呢?

3 个答案:

答案 0 :(得分:8)

变量是子/函数(过程)的本地变量。在您的情况下,“当前范围”。 VB,VBA和VBScript在过程中没有代码块的概念。如果我没记错的话,唯一的代码块是模块,类,表单(类)和过程。

为方便起见,您可以在过程中的任何位置声明变量。然而,“当前范围”是程序。

这是一个设计决策,使语言更容易用于 B - 获胜者。


当前范围内的重复声明

  

指定的名称已在此范围内使用。对于   例如,如果定义了两个变量,则它们可以具有相同的名称   不同的程序,但如果它们在同一程序中定义则不会   过程

http://msdn.microsoft.com/en-us/library/gg251613.aspx

插入

答案 1 :(得分:1)

在VBA中,无法在同一过程中声明具有相同名称的两个变量。有关详细信息,请参阅此文章:Duplicate declaration in current scope

在您的情况下,“当前范围”是当前程序。 ifelse块共享相同的范围。

例如,即使第二个声明无法访问,以下内容也会出现相同的错误:

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 

条件块的目的是在两种不同的情况下执行两段不同的代码。如果要以任一方式声明相同的变量,则根本不需要条件块。很有可能,它应该在条件之前移动。