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 中受益。 • 还要确保您的所有RangeCells 对象都引用了工作簿和工作表。否则 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中单元格发生改变触发事件,怎么指定某个单元格

Excel VBA怎么实现整行/列的遍历

VBA Excel如何在工作表区域内查找某个值,发回这个值所在的行号、列号

如何使用Excel VBA仅更新特定工作表中的链接,而不是整个工作簿?

如何用EXCEL的VBA控制WORD文档?