关于全局变量和私有变量有关问题不明白

关于全局变量和私有变量问题不明白在窗体中就一个列表框当值等于1~100中每个数时,对这个数进行1~这个数相

关于全局变量和私有变量问题不明白
在窗体中就一个列表框
当值等于1~100中每个数时,对这个数进行1~这个数相加,如50,从1~50进行相加。下面代码能实现这个功能,问题是i怎么就不会出错的?

Private Sub Form_Load()
  Dim i As Integer

  On Error GoTo handlerror

  List1.Clear
   
  For i = 1 To 100
  List1.AddItem i & "=" & iSum(i)
  Next i

  Exit Sub
handlerror:

End Sub


Public Function iSum(dhi)
  Dim i As Integer
   
  For i = 1 To dhi
  iSum = iSum + i
  Next i

End Function


[解决办法]
2个过程里的i都是局部的(私有),不会有冲突。


[解决办法]
虽然都有就有i,但处于不同的模块,属局部变量,互不影响。但是i还是可以定义成窗体变量的(在整个窗体内有效):

VB code
Option ExplicitDim i As IntegerPrivate Sub Form_Load()  'Dim i As Integer  On Error GoTo handlerror  List1.Clear      For i = 1 To 100  List1.AddItem i & "=" & iSum(i)  Next i  Exit Subhandlerror:End SubPublic Function iSum(dhi)  'Dim i As Integer      For i = 1 To dhi  iSum = iSum + i  Next iEnd Function
[解决办法]
两个i都是局部变量,分别指向不同的内存地址,这是它们不是同一个变量的根本所在。
此外函数iSum的参数是传值,也就是传递一个变量的副本给它,Load中调用iSum,传递i给它,实际上就是创建一个i的副本(也就是iSum中i的内存地址)用它来计算。即使你修改了它,也不会影响到Load中的i
[解决办法]
1、全局变量:
需要用 PUBLIC 声明;
一般情况下,最好将所有的全局变量定义在单独的《模块》文件里,进行集中、统一的管理比较好!
2、模块变量:
需要用 PRIVATE 声明即可;
指类、或模块、或窗体中的任何一个方法或函数访问的,声明在方法体或函数体外面的变量;
3、私有变量:
需要用 PRIVATE 或者 DIM 声明即可;
指在方法体或函数体内声明的变量,且非 PUBLIC 访问级,所以这个变量只能被当前方法或函数访问使用;

[解决办法]
1、全局变量:
一般定义在bas模块中,使用public 或者 global声明
(是一种特殊的模块变量,工程中的任何地方可以访问的变量) 
2、模块变量:
 form 模块、ocx、cls等模块中定义的变量:
 使用private 或者dim在模块头上定义,这些变量只有当前模块中的代码可以访问
 使用public在模块头上定义的变量,可以被别的模块访问,但必须使用 模块名.变量名 或模块变量.变量名的形式访问

3、局部变量:
在sub 、function、property内部定义的变量,这些变量如果超出 end sub \end function \end property 就失效