ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 代码在32位EXCEL运行中能正常执行,但换成64位EXCEL后,运行是会随机中断在close

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-11-28 09:10 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
以下代码,在32位EXCEL运行中能正常执行,但换成64位EXCEL后,运行是会随机中断在wb.close true,系统是WIN10 64位,excel版本是365,请老师们帮忙看看怎么解决,谢谢

image.png



sub feiyongchaifen()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim wb As Workbook
Dim dic As Object
Dim dic1 As Object

k = Sheets("预算部门").Range("g2").End(xlDown).Row '部门的最后一行

For i = 2 To k '此为最外层的循环,为的是另存出每一个部门

    t = Sheets("预算部门").Range("g" & i) '外层循环部门名称
    t1 = Sheets("预算部门").Range("h" & i) '外层循环部门索引

    ActiveWorkbook.SaveCopyAs Filename:=ThisWorkbook.Path & "\【" & t1 & "-" & t & "】2023部门预算.xlsm"

    Set wb = Workbooks.Open(ThisWorkbook.Path & "\【" & t1 & "-" & t & "】2023部门预算.xlsm")
    n = 0
    For i1 = 2 To k '此为内层循环,为的是取本部门的下一级部门(不含下下级部门),及部门汇总中列示的部门
       '下级部门数量

      tt1 = wb.Sheets("预算部门").Range("h" & i1) '内循环的部门索引

      If Left(tt1, Len(t1)) * 1 = t1 * 1 And Len(tt1) - Len(t1) = 2 Then '条件是内层循环的部门代码等于外层循环部门,且部门代码的位数差是2位的
         n = n + 1
         wb.Sheets("部门汇总").Cells(3, 13 + n) = wb.Sheets("预算部门").Range("g" & i1) '部门汇总增加下级部门名称

         nm = wb.Sheets("预算部门").Range("g" & i1)

         wb.Sheets("月度").Copy after:=Sheets(Sheets.Count)
         ActiveSheet.Name = nm
         ActiveSheet.Range("i2") = wb.Sheets("预算部门").Range("g" & i1)

         Set dic = CreateObject("scripting.dictionary")
         For k2 = 2 To Sheets("费用明细").Range("av2").End(xlDown).Row '费用明细的最后一行
             If Left(wb.Sheets("费用明细").Range("bm" & k2), Len(tt1)) * 1 = tt1 * 1 Then

                dic(wb.Sheets("费用明细").Range("aw" & k2).Value) = dic(wb.Sheets("费用明细").Range("aw" & k2).Value) + wb.Sheets("费用明细").Range("au" & k2).Value

             End If
         Next k2

         For k1 = 4 To 56

            wb.Sheets(nm).Range("j" & k1) = dic(wb.Sheets(nm).Range("a" & k1).Value)
         Next k1

      End If

    Next i1

    Set dic1 = CreateObject("scripting.dictionary")
    For k2 = 2 To Sheets("费用明细").Range("av2").End(xlDown).Row '费用明细的最后一行
        If Left(wb.Sheets("费用明细").Range("bm" & k2), Len(t1)) * 1 = t1 * 1 Then
           dic1(wb.Sheets("费用明细").Range("aw" & k2).Value) = dic1(wb.Sheets("费用明细").Range("aw" & k2).Value) + wb.Sheets("费用明细").Range("au" & k2).Value
        End If
    Next k2
    For k1 = 4 To 56
        wb.Sheets("月度").Range("j" & k1) = dic1(wb.Sheets("月度").Range("a" & k1).Value)
    Next k1

   wb.Sheets("费用明细").Delete
   wb.Sheets("预算部门").Delete
   wb.Sheets("月度").Activate
   wb.Sheets("月度").Range("i2").Select
   wb.Sheets("月度").Range("i2") = t
'   wb.Save
   wb.Close True

Next i
MsgBox "运行完毕"

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub


TA的精华主题

TA的得分主题

发表于 2022-11-28 15:39 | 显示全部楼层
虽然不清楚啥意思,但是用字典不用数组,反复操作单元格

TA的精华主题

TA的得分主题

发表于 2022-11-29 11:02 | 显示全部楼层
标红的这句代码,是很常规的代码,就是关闭打开的工作簿而已,应该是不存在不兼容的问题的,
至于具体原因,没有附件,没有具体的需求说明,爱莫能助

TA的精华主题

TA的得分主题

发表于 2022-11-29 14:55 来自手机 | 显示全部楼层
会随机中断在wb.close true

是不是64位文件太多,内存溢出来了,文件和32位一样多么?

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-29 20:27 | 显示全部楼层
zpy2 发表于 2022-11-29 14:55
会随机中断在wb.close true

是不是64位文件太多,内存溢出来了,文件和32位一样多么?

谢谢,换回32位的excel,问题没再出现了

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-11-29 20:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
3190496160 发表于 2022-11-29 11:02
标红的这句代码,是很常规的代码,就是关闭打开的工作簿而已,应该是不存在不兼容的问题的,
至于具体原因 ...

谢谢! 能够完整执行完几次循环,但后面就会随机断在这里,优势是i=10,有时是i=20,换回32位excel就不发生了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 19:25 , Processed in 0.029943 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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