在窗体中就一个列表框
当值等于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 iEnd Function

解决方案 »

  1.   

    虽然都有就有i,但处于不同的模块,属局部变量,互不影响。但是i还是可以定义成窗体变量的(在整个窗体内有效):
    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 Sub
    handlerror:End Sub
    Public Function iSum(dhi)
      'Dim i As Integer
        
      For i = 1 To dhi
      iSum = iSum + i
      Next iEnd Function
      

  2.   

    两个i都是局部变量,分别指向不同的内存地址,这是它们不是同一个变量的根本所在。
    此外函数iSum的参数是传值,也就是传递一个变量的副本给它,Load中调用iSum,传递i给它,实际上就是创建一个i的副本(也就是iSum中i的内存地址)用它来计算。即使你修改了它,也不会影响到Load中的i
      

  3.   

    1、全局变量:
       需要用 PUBLIC 声明;
       一般情况下,最好将所有的全局变量定义在单独的《模块》文件里,进行集中、统一的管理比较好!
    2、模块变量:
       需要用 PRIVATE 声明即可;
       指类、或模块、或窗体中的任何一个方法或函数访问的,声明在方法体或函数体外面的变量;
    3、私有变量:
       需要用 PRIVATE 或者 DIM 声明即可;
       指在方法体或函数体内声明的变量,且非 PUBLIC 访问级,所以这个变量只能被当前方法或函数访问使用;
      

  4.   

    1、全局变量:
      一般定义在bas模块中,使用public 或者 global声明
      (是一种特殊的模块变量,工程中的任何地方可以访问的变量) 
    2、模块变量:
     form 模块、ocx、cls等模块中定义的变量:
     使用private 或者dim在模块头上定义,这些变量只有当前模块中的代码可以访问
     使用public在模块头上定义的变量,可以被别的模块访问,但必须使用 模块名.变量名 或模块变量.变量名的形式访问3、局部变量:
    在sub 、function、property内部定义的变量,这些变量如果超出 end sub \end function \end property 就失效