ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 115|回复: 4

[求助] 请教代码,错在哪里?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-9-18 17:11 | 显示全部楼层 |阅读模式
本帖最后由 烟火孤星泪 于 2024-9-18 20:25 编辑

运行时提示错误,是对象不对吗?
  1. Sub 批量生成()
  2.     Dim r%, i%
  3.     Dim arr, brr
  4.     Dim d As Object
  5.     Application.ScreenUpdating = False
  6.     Application.DisplayAlerts = False
  7.     Set d = CreateObject("scripting.dictionary")
  8.     Set d1 = CreateObject("scripting.dictionary")
  9.     With Worksheets("消费明细")
  10.        .AutoFilterMode = False
  11.         r =.Cells(.Rows.Count, 1).End(xlUp).Row
  12.         arr =.Range("a2:g" & r)
  13.     End With
  14.     For i = 1 To UBound(arr)
  15.         rq = DateValue(arr(i, 5))
  16.         sj = TimeValue(arr(i, 5))
  17.         If Not d.exists(arr(i, 7)) Then
  18.             Set d(arr(i, 7)) = CreateObject("scripting.dictionary")
  19.         End If
  20.         If Not d(arr(i, 7)).exists(arr(i, 3)) Then
  21.             Set d(arr(i, 7))(arr(i, 3)) = CreateObject("scripting.dictionary")
  22.         End If
  23.         If Not d(arr(i, 7))(arr(i, 3)).exists(rq) Then
  24.             ReDim brr(1 To 11)
  25.             brr(1) = arr(i, 3)
  26.             brr(2) = arr(i, 4)
  27.             brr(3) = rq
  28.             brr(11) = arr(i, 7)
  29.         Else
  30.             brr = d(arr(i, 7))(arr(i, 3))(rq)
  31.         End If
  32.         n = 0
  33.         If sj >= #5:00:00 PM# Then
  34.             n = 4
  35.         ElseIf sj >= #11:00:00 AM# And sj <= #1:00:00 PM# Then
  36.             n = 5
  37.         ElseIf sj >= #6:30:00 AM# And sj <= #9:00:00 AM# Then
  38.             n = 6
  39.         End If
  40.         If n <> 0 Then
  41.             brr(n) = brr(n) + Val(arr(i, 6))
  42.         End If
  43.         d(arr(i, 7))(arr(i, 3))(rq) = brr
  44.     Next
  45.     ReDim crr(1 To d1.Count, 1 To 10)
  46.     ReDim drr(1 To 10)
  47.     drr(1) = "合计"
  48.     m = 0
  49.     For Each aa In d1.keys
  50.         brr = d1(aa)
  51.         For j = 7 To 9
  52.             brr(10) = brr(10) + brr(j)
  53.         Next
  54.         m = m + 1
  55.         For j = 1 To UBound(brr)
  56.             crr(m, j) = brr(j)
  57.         Next
  58.         For j = 2 To 10
  59.             drr(j) = drr(j) + brr(j)
  60.         Next
  61.     Next
  62.     With Worksheets("全校统计")
  63.        .Select
  64.        .UsedRange.Offset(1, 0).Clear
  65.        .Range("a2").Resize(UBound(crr), UBound(crr, 2)) = crr
  66.        .Cells(1 + UBound(crr) + 1, 1).Resize(1, UBound(drr)) = drr
  67.         With.Range("a1").Resize(1 + UBound(crr) + 1, UBound(crr, 2))
  68.            .Borders.LineStyle = xlContinuous
  69.             With.Font
  70.                .Name = "微软雅黑"
  71.                .Size = 11
  72.             End With
  73.            .HorizontalAlignment = xlCenter
  74.            .VerticalAlignment = xlCenter
  75.         End With
  76.     End With
  77.     Application.ScreenUpdating = True
  78.     MsgBox "所有报表已生成!"
  79. End Sub</span>
复制代码

TA的精华主题

TA的得分主题

发表于 2024-9-18 19:22 | 显示全部楼层
ReDim crr(1 To d1.Count, 1 To 10)第一行就报错了

TA的精华主题

TA的得分主题

发表于 2024-9-18 19:23 | 显示全部楼层
本帖最后由 zxsea_7426 于 2024-9-18 19:25 编辑

第一行与第二行中间省略了N行代码了吧


整体看下来了。这代码无头无脑的啊

TA的精华主题

TA的得分主题

发表于 2024-9-18 19:45 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
For Each aa In d1.keys
这一行代码前面没有字典操作的经过,显然你把前面的代码删除了。

TA的精华主题

TA的得分主题

发表于 2024-9-18 20:21 | 显示全部楼层
改的面目全非然后来个无厘头求助!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 00:29 , Processed in 0.033280 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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