当前范围错误中的重复声明;两个循环具有相同的变量,可变范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当前范围错误中的重复声明;两个循环具有相同的变量,可变范围相关的知识,希望对你有一定的参考价值。

我有这个代码:从for1有两个10循环。在每个循环中声明一个变量k

Sub Test()
    Dim i As Long
    For i = 1 To 10
        Dim k As Long
        k = i * 2

        Debug.Print k
    Next


    Dim j As Long
    For j = 1 To 10
        Dim k As Long  'error here
        k = j * 2

        Debug.Print k
    Next

End Sub

但是,当我尝试运行它时,我得到一个duplicate declaration in the current scope错误。我不知道为什么我得到它 - 不是变量的范围受循环限制,因为它是在它内部声明的?有没有办法删除第一个变量的残余,以便可以在第二个循环中创建一个具有相同名称的变量?

答案

在过程中声明变量时,此变量对所有过程都有效,而不仅仅对于loops。如果要清除变量,可以设置k = 0

当使用Dim语句声明局部变量时,只有声明它的过程正在运行时,该变量才会保留。通常,当过程完成运行时,不保留过程的局部变量的值,并释放分配给这些变量的内存。下次执行该过程时,将重新初始化其所有局部变量。

https://support.microsoft.com/en-us/help/141693/scope-of-variables-in-visual-basic-for-applications

http://www.excel-easy.com/vba/examples/variable-scope.html

以上是关于当前范围错误中的重复声明;两个循环具有相同的变量,可变范围的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在两个栅格堆栈上应用PCA(具有相同的变量)

java声明局部变量时,省略大括号,可以同时声明两个名称和类型相同的局部变量吗?

在全局范围内两次声明相同的静态变量

具有基于范围的循环遍历 equal_range 的 C++ 多图:错误消息 [重复]

类方法和具有相同名称的变量,C ++中的编译错误不在Java中?

js中的函数提升和变量提升