变量的作用范围
在代码的任何位置,我们都可以用Dim语句定义变量,但是不同位置定义的变量,其作用范围是不同的。
变量的作用范围原理如下:如果在流程语句之内定义的,则只在该流程语句之内以及嵌套的子流程语句内有效,如果在流程语句之外定义的,则在该段代码的任何位置有效。
下面我们通过一些例子来说明上述原理,这些代码本身没有意义,甚至显得非常冗余,但是可以很好地说明问题:
示例一
下面的代码能够正常执行:
Dim
m As Integer 'm在流程语句之外,在任何位置可以使用示例二
下面的会报错,问题出在最后一行代码,因为变量n是在If语句内定义的,不能在If语句之外使用:
Dim
m As Integer 'm在流程语句之外,在任何位置可以使用下面的代码也会报错,问题同样出在最后一行:
Dim
m As Integer = 100如果要在If语句之外使用变量,必须在If语句之前定义好:
Dim
m As Integer = 100上面的代码,由于变量n和m是在if语句之前定义的,所以在if语句之内和之外,都能使用这两个变量。
示例三
下面的语句在执行过程中会报错:
Dim
Sum As Integer这是因为变量i是在语句For中定义的,所以只能在循环语句(For...Next)中使用,最后一行代码位于循环语句之外,却使用了变量i,所以会报错,错误提示为“变量i未申明”。
如果某个变量在循环语句之内和之外都要使用,那么应该在循环语句之前定义好变量,例如:
Dim
Sum As Integer上面的代码中,变量Sum和i是在循环语句之前定义的,所以在循环语句之内和之外都可以使用。
示例四
不同的流程语句内,可以定义同名的变量,例如在下面的代码中,我们在四个地方定义了名称为n的变量:
Dim
m As Integer = 5实际使用的时候,如果某一个变量需要在不同的流程中使用,应该直接在流程外定义,如果某个变量只在流程内使用,那么就应该在该流程内定义。
示例五
在流程语句之内定义的变量,可以在子流程内使用,例如下面的代码中,变量n是在If语句中定义的,在嵌套的子流程Select Case语句中也使用了该变量:
Dim
m As Integer = 1示例六
流程内和流程外,不能有同名的变量,例如下面的代码会出现错误,这是因为变量n同时在流程内和流程外定义了:
Dim
m As integer