excel - excel vba卡在某个点
问题描述
我有一个 32 位 excel 2016。excel 有一个专有的附加组件,允许查询专有数据库。附加组件包括一个函数 DvCHRaw(),它返回一个数据数组。
我正在写一个列出查询条件的母亲 excel vba。vba 倾向于打开新工作簿并执行查询然后关闭工作簿。例如,我将每天循环 1000 列,循环 10 天。我会将每天的数据保存在自己的文件夹中,其中包含 1000 个 csv 文件。
但是,excel 会卡在某个时间点,例如 9 天或 5 天。尽管我在工作簿关闭后设置了 wb = nothing,但不确定这是否与内存相关。
有人可以在这里帮忙吗?
这是我写的代码
Sub raw_data_extract()
Set StartDate = Range("B1")
nextdate = StartDate
Set EndDate = Range("B2")
Do While nextdate <= EndDate
Set tagname = Range("E1")
savedate = Month(nextdate) & "-" & Day(nextdate) & "-" & Year(nextdate)
newfolderpath = "D:\rawdata\" & savedate
If Dir(newfolderpath, vbDirectory) = "" Then
MkDir (newfolderpath)
End If
Do While tagname.Value <> ""
Set wb = Workbooks.Add()
Range("A1").Value = nextdate
Range("B1").Value = tagname
Range("C1").Value = "=ROWS(DvCHRaw(""APP"",B1,FALSE,""Timestamp;Value"",""Local"",A$1,A$1+1,0,0,-1))"
Set arraystart = Range("A2")
Set arrayend = arraystart.Offset(Range("C1") - 1, 1)
Range(arraystart, arrayend).FormulaArray = "=DvCHRaw(""APP"",B1,FALSE,""Timestamp;Value"",""Local"",A$1,A$1+1,0,0,-1)"
Range("C1").Clear
Range("A2").Select
Range(Selection, Selection.End(xlDown)).NumberFormat = "m/d/yyyy h:mm:ss.000"
Range("A1").CurrentRegion.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.DisplayAlerts = False
replaceslash = Replace(tagname, "/", "#")
replaceslashdot = Replace(replaceslash, ".", "#")
newname = replaceslashdot & "_" & savedate
Application.ActiveWorkbook.SaveAs newfolderpath & "\" & newname, xlCSV
Application.DisplayAlerts = True
ActiveWorkbook.Close savechanges = False
Set tagname = tagname.Offset(1, 0)
Set wb = Nothing
Loop
nextdate = nextdate + 1
Loop
MsgBox "Your Automated Task successfully ran at " & TimeValue(Now), vbInformation
Application.DisplayAlerts = False
ActiveWorkbook.Close
Application.DisplayAlerts = True
End Sub
解决方案
是的,这很可能是内存问题。
您最好每天使用任务计划程序打开您的 .xlsm 或 .xlsb 文件。这不是对您问题的确切答案,而是会有所帮助的解决方案。完成后请记住将其包含在宏Application.Quit
代码中。
- 打开开始。
- 搜索任务计划程序,然后单击顶部结果以打开体验。
- 右键单击“任务计划程序库”分支,然后选择“新建文件夹”选项。
- 键入文件夹的名称。例如,我的任务。
- 单击确定按钮。
- 展开“任务计划程序库”分支,然后选择 MyTasks 文件夹。
- 单击操作菜单。
- 选择创建基本任务选项。
- 在“名称”字段中,键入任务的简短描述性名称。
- 单击下一步按钮。
- 选择每日选项。
- 单击下一步按钮。
- 选择启动程序选项以执行脚本/Excel 文件。
- 在“程序/脚本”字段中,指定 Excel 文件的路径。
- 单击完成按钮。
你完成了
而且,你不会后悔的。我敢打赌,你会更频繁地开始使用任务调度程序来进行其他自动化,因为它有各种触发器,并且独立于任何运行或不运行的应用程序。
关于 Excel 的简短说明
无论如何,Excel 在很长一段时间后都有挂断的倾向,很难说出原因。在我个人看来,这是一个如此庞大但出色的应用程序,开发人员多年来一直在摸索如何解决这些问题。尽管如此,微软的主要关注点是让一切变得更简单、更直观和云集成。
最重要的是,VBA 很久以前就被放弃了,并被 Microsoft 视为遗留解决方案。尽管自 v. 2010 以来出现了新版本的 Excel,但没有包含其他功能。如果我没记错的话,那么在 MS Office 包中它仍然是 6.0 版。他们只是不会杀死它,因为对于许多企业来说,依赖于(有时是优秀且非常专业的)重要的宏,这些宏不能轻易地用用 JS 编写的新扩展范例替换(或根本不能)以便在任何地方工作。
祝你好运!
有问题?在评论部分问我任何事情。
推荐阅读
- c++ - 容器的 begin() 和 end() 的不同实现
- scala - ConcurrentHashMap[String, AtomicInteger] 或 ConcurrentHashMap[String, Int] 用于线程安全计数器?
- c++ - Zobrist 转置表中的碰撞
- leaflet - 如何根据用户生成的表动态调整符号系统
- r - 如何从 R 代码中找到代数表达式?
- python - 如何在 pandas DataFrame.to_sql() 调用期间防止 SHOW FULL TABLES 查询
- c# - 如何使用 C# 检查 LocalSystem 帐户是否具有对特定本地目录的读/写权限?
- javascript - 仅获取 JavaScript 中对象数组中的特定值
- javascript - 尝试连接 Sendgrid API 时出错
- sql - 将列转换为行并在不同表中求和查询