Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5437|回复: 5

[已解决]vba数据溢出,求大师指点

[复制链接]
发表于 2012-11-1 23:35 | 显示全部楼层 |阅读模式
  1. Sub 故障数据分析()
  2. Dim wb As Workbook, Sh As Worksheet
  3. Dim nR%, nR1%, Rq$, ds As Object, Arr(), Brr()
  4. Set ds = CreateObject("Scripting.dictionary") '创建一个字典对象
  5. 'On Error Resume Next
  6. Application.ScreenUpdating = False
  7. For Each Sh In Worksheets '循环工作表
  8. If Sh.Name <> "首页" Then
  9. With Sh
  10. If .Range("b2").Value <> "" Then '如果不是空表
  11. Rq = Format(.Range("b2").Value, "yyyymmdd")
  12. nR = .Range("b1").End(xlDown).Row
  13. For i = 11 To 17 Step 2
  14. .Cells(2, i).Resize(nR, 1).ClearContents '清除原统计结果
  15. Next
  16. Arr = .Range("a2:q" & nR).Value
  17. Set wb = GetObject(Sheets("首页").Range("D6").Text & "\小区故障时长" & Rq & ".xlsx") '打开数据工作簿
  18. If err = 0 Then
  19. With wb.Sheets("Report1")
  20. If .Range("a2") <> "" Then
  21. nR1 = .Range("a1").End(xlDown).Row
  22. Brr = .Range("a2:f" & nR1).Value
  23. For i = 1 To nR1 - 1
  24. If Brr(i, 6) <> 0 Then
  25. ds(Brr(i, 1) & Brr(i, 2) & Rq) = ds(Brr(i, 1) & Brr(i, 2) & Rq) + 1
  26. End If
  27. Next
  28. For i = 1 To nR - 1
  29. For j = 10 To 16 Step 2
  30. If Arr(i, j) <> "" Then
  31. Arr(i, j + 1) = Arr(i, j + 1) + ds(Arr(i, 1) & Arr(i, j) & Rq)
  32. End If
  33. Next
  34. Next
  35. End If
  36. End With
  37. wb.Close
  38. .Range("a2:q" & nR).Value = Arr
  39. Else
  40. err.Clear
  41. End If
  42. End If
  43. End With
  44. End If
  45. Next
  46. Application.ScreenUpdating = True

  47. End Sub
复制代码
代码运行到nR1 = .Range("a1").End(xlDown).Row 这一行的时候提示溢出,请问大师们,这是什么问题呢?
最佳答案
2012-11-1 23:47
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符号 (%)。

Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。

在03里,这个整型就会溢出了,65536吧。
发表于 2012-11-1 23:43 | 显示全部楼层
溢出,数组里一般会是上标越界。在报错的时候点调试,观察本地窗口变量值。

另外还有就是对象的访问。
是否是空值,或者不存在的对象。
回复

使用道具 举报

发表于 2012-11-1 23:44 | 显示全部楼层
回复

使用道具 举报

发表于 2012-11-1 23:45 | 显示全部楼层
你的NR是整数类型,换成LONG。dim nR&
如果在2010里,肯定就出错了。
回复

使用道具 举报

发表于 2012-11-1 23:47 | 显示全部楼层    本楼为最佳答案   
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字符是百分比符号 (%)。

Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。

在03里,这个整型就会溢出了,65536吧。
回复

使用道具 举报

 楼主| 发表于 2012-11-1 23:54 | 显示全部楼层
hwc2ycy 发表于 2012-11-1 23:47
Integer 变量存储为 16位(2 个字节)的数值形式,其范围为 -32,768 到 32,767 之间。Integer 的类型声明字 ...

是的,修改为&,范围扩大了,问题就解决了,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-18 18:28 , Processed in 0.285032 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表