ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请老师指点下for语句为什么出现内存溢出,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-2-14 20:46 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 路的前方是梦想 于 2023-2-14 22:31 编辑

程序如下所示:ubound(arr)=9949,但是在for这个语句中,运行程序,i会显示到9950,导致 .[a3].Resize(UBound(arr), 59) = arr,这句话会内存溢出,是为什么呢?请老师指导,谢谢!!


Sub demo11()
Dim arr
With Sheet6
    arr = .Range(.[bg3], .Cells(Rows.Count, 1).End(3))
    For i = 1 To UBound(arr)

        If Len(arr(i, 24)) <> 0 Then
            arr(i, 39) = arr(i, 25) / arr(i, 24)
        End If

        If Len(arr(i, 14)) <> 0 And (arr(i, 10) - arr(i, 14)) <> 0 Then
            arr(i, 38) = (arr(i, 11) - arr(i, 15)) / (arr(i, 10) - arr(i, 14))
        Else
            If Len(arr(i, 12)) <> 0 And (arr(i, 10) - arr(i, 12)) <> 0 Then
                arr(i, 38) = (arr(i, 11) - arr(i, 13)) / (arr(i, 10) - arr(i, 12))
            Else
                If Len(arr(i, 10)) <> 0 Then
                    arr(i, 38) = arr(i, 11) / (arr(i, 10) - arr(i, 9))
                End If
            End If
        End If

        If Len(arr(i, 16)) <> 0 And Len(arr(i, 18)) <> 0 Then
            arr(i, 42) = arr(i, 16) - arr(i, 18)
            arr(i, 43) = arr(i, 17) - arr(i, 19)
        End If

        If Len(arr(i, 18)) <> 0 And Len(arr(i, 20)) <> 0 Then
            arr(i, 44) = arr(i, 18) - arr(i, 20)
            arr(i, 45) = arr(i, 19) - arr(i, 21)
        End If

        If Len(arr(i, 20)) <> 0 And Len(arr(i, 22)) <> 0 Then
            arr(i, 46) = arr(i, 20) - arr(i, 22)
            arr(i, 47) = arr(i, 21) - arr(i, 23)
        End If

    Next i
       .[a3].Resize(UBound(arr), 59) = arr
End With
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-14 22:05 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请各位老师指点,谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-15 06:19 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请老师指点下,谢谢!错误代码07

TA的精华主题

TA的得分主题

发表于 2023-2-15 06:25 来自手机 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 shiruiqiang 于 2023-2-15 06:34 编辑

新手路过,没附件不好说。你的arr取值范围是bg3开始,是否超范围。因为 arr = .Range(.[bg3], .Cells(Rows.Count, 1).End(3)),下标 .Cells(Rows.Count, 1).End(3)应该是第一列,1改“bg”试试可行吗?

TA的精华主题

TA的得分主题

发表于 2023-2-15 07:54 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-15 08:03 | 显示全部楼层
liulang0808 发表于 2023-2-15 07:54
typename(arr)看看类型

老师,您好,我把for语句下边的每个内容逐段测试,发现程序中加入这段内容的时候,If Len(arr(i, 16)) <> 0 And Len(arr(i, 18)) <> 0 Then......才开始出现报错7
arr类型是string

TA的精华主题

TA的得分主题

发表于 2023-2-15 08:04 | 显示全部楼层
路的前方是梦想 发表于 2023-2-15 08:03
老师,您好,我把for语句下边的每个内容逐段测试,发现程序中加入这段内容的时候,If Len(arr(i, 16))  0 ...

看arr对应的表格区域,溢出以后查下边界

TA的精华主题

TA的得分主题

发表于 2023-2-15 08:06 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如果还有问题,建议上传模拟附件吧

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-2-15 08:09 | 显示全部楼层
liulang0808 发表于 2023-2-15 08:04
看arr对应的表格区域,溢出以后查下边界

程序运行的时候,会提示报错,我查看了以下Ubound(arr)=9949,但是看next i 中的i及程序内容i的显示都是9950,好奇怪

TA的精华主题

TA的得分主题

发表于 2023-2-15 08:14 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
路的前方是梦想 发表于 2023-2-15 08:09
程序运行的时候,会提示报错,我查看了以下Ubound(arr)=9949,但是看next i 中的i及程序内容i的显示都是9 ...

楼主如果还有问题,建议上传附件
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-19 06:34 , Processed in 0.042553 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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