excel vba卡在某个点
Posted
技术标签:
【中文标题】excel vba卡在某个点【英文标题】:excel vba stuck at certain point 【发布时间】:2021-02-11 11:46:31 【问题描述】:我有一个 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
【问题讨论】:
您可能会从阅读How to avoid using Select in Excel VBA 中受益。 • 还要确保您的所有Range
和Cells
对象都引用了工作簿和工作表。否则 Excel 会猜测您的意思是哪个工作簿和工作表,它可能会猜错。不要给 Excel 猜测的空间并尽可能精确。例如。 wb.Worksheets("Sheet1").Range
谢谢。这是一个很好的观点
【参考方案1】:
是的,很可能是内存问题。
您最好每天使用任务计划程序打开您的 .xlsm 或 .xlsb 文件。这不是对您问题的确切答案,而是会有所帮助的解决方案。完成后请记住在宏中包含Application.Quit
代码。
-
打开开始。
搜索任务计划程序,然后单击顶部结果以打开体验。
右键单击“任务计划程序库”分支,然后选择“新建文件夹”选项。
键入文件夹的名称。例如,MyTasks。
点击确定按钮。
展开“任务计划程序库”分支,然后选择 MyTasks 文件夹。
点击操作菜单。
选择创建基本任务选项。
在“名称”字段中,输入任务的简短描述性名称。
单击“下一步”按钮。
选择每日选项。
单击“下一步”按钮。
选择启动程序选项以执行脚本/Excel 文件。
在“程序/脚本”字段中,指定 Excel 文件的路径。
单击“完成”按钮。
你已经完成了
而且,你不会后悔的。我敢打赌,您会更频繁地开始使用任务调度程序来进行其他自动化,因为它具有各种触发器,并且独立于任何正在运行的应用程序。
关于 Excel 的简短说明
无论如何,Excel 在很长一段时间后都有挂断的倾向,而且很难说出原因。在我个人看来,这是一个如此庞大但出色的应用程序,开发人员多年来一直在摸索如何解决这些问题。尽管如此,微软的主要重点是让一切变得更简单、更直观和云集成。
最重要的是,VBA 很久以前就已被放弃,并被 Microsoft 视为遗留解决方案。尽管自 v. 2010 以来出现了新版本的 Excel,但没有包含其他功能。如果我没记错的话,那么在 MS Office 包中它仍然是 6.0 版。他们只是不杀它,因为对于许多企业来说,依赖于(有时非常出色且非常专业)重要的宏,这些宏不能轻易地用用 JS 编写的新扩展范例替换(或根本不能)以便在任何地方工作。
祝你好运! ?
有问题吗?在 cmets 部分问我任何问题。
【讨论】:
以上是关于excel vba卡在某个点的主要内容,如果未能解决你的问题,请参考以下文章
excel 用vba给某个excel.xls文件添加密码 怎么写啊,不要保护工作簿或者工作表,只是加密码而已
EXCEL VBA中单元格发生改变触发事件,怎么指定某个单元格
VBA Excel如何在工作表区域内查找某个值,发回这个值所在的行号、列号