这段程序为什么会发生溢出错误?Private Sub Command1_Click()
Dim I As Integer
Dim J As Integer
On Error GoTo JERROR
For I = 0 To 3
MsgBox (I)
J = 10000 * 10000 '让J发生溢出错误
JERROR:
Next I
End Sub

解决方案 »

  1.   

    Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。
    Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。
    对于你所写的程序中变量J为Integer,所以出错就不足为奇了。
      

  2.   

    如果長整型不行,
    請試下Double或可變型(va...)
      

  3.   

    象下面这样不会出错:dim J as Long ' 改为长整型
    ...
    J = 10000& * 10000&  '加长整型符号&我的猜想(也许不对):
    VB不象C那样,先将integer转为long再计算,然后赋值
    10000后面没跟&符号时,VB就把它当integer,相乘后溢出,转错误处理,而不管计算结果赋给谁。
    如果把J定义为Integer,赋一个Long*Long值给它,也会出错至于为什么显示0以后不出现“运行时错误”,
    而一定要在显示1(第二次进入循环)以后才显示,我也很奇怪
    程序明明进入了错误处理。
    想不通。VB的汇编代码太难看了,看了半天还是很糊涂 :(
      

  4.   

    Private Sub Command1_Click()
    Dim I As Integer
    Dim J As Variant
    For I = 0 To 3
    J = 10000& * 10000& 
    MsgBox J
    Next
    End Sub
    不会出错,不知道为什么
      

  5.   

    J = 10000& * 10000&  '加长整型符号&
    不会出错了,可谁知道原因呢?
      

  6.   


      Variant变量的存储空间为16个字节,当然不会出错.
      但是实际应用中没这么应用的,因为无论从代码编写
      习惯和实际运行效率开看,大部分程序员都不会用它.  2. 你的错误处理模块应该写在循环外边. 例如
     
         ...     For I = 0 To 3
           MsgBox (I)
           J = 10000 * 10000 '让J发生溢出错误
         Next I     Exit Sub
     
    JERROR:
       MsgBox "error:[" & Err.Number & "]:" & Err.Description  3. 确实应该写成  J = 10000& * 10000& 的样式,具体原因
         前面的朋友已经说了.  4. 总结: 虽然只是一个非常简单的例子,但是对培养良好的编程
         习惯还是有点帮助的.