excel vba卡在某个点上

excel vba卡在某个点上,excel,vba,Excel,Vba,我有一个32位的excel 2016。excel有一个专有的附加组件,允许查询专有数据库。该插件包含一个函数DvCHRaw(),该函数返回一个数据数组 我正在编写一个母excel vba,其中列出了查询条件。vba倾向于打开新工作簿并执行查询,然后关闭工作簿。例如,我将每天循环1000列,然后循环10天。我将每天的数据保存在自己的文件夹中,其中包含1000个csv文件 但是,excel将在某个时间点卡住,例如9天或5天。虽然我在工作簿关闭后设置了wb=nothing,但不确定这是否与内存有关 有

我有一个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
次原始数据提取()
设置起始日期=范围(“B1”)
下一个日期=开始日期
设置结束日期=范围(“B2”)

下一个日期时执行是的,很可能是内存问题

您最好每天使用任务计划程序打开.xlsm或.xlsb文件。这不是你问题的确切答案,而是一个有帮助的解决方案。只需记住将其包含在宏
应用程序中。完成后退出
代码

  • 开放式启动
  • 搜索任务计划程序,然后单击顶部结果以打开体验
  • 右键单击“任务计划程序库”分支,然后选择“新建文件夹”选项
  • 键入文件夹的名称。例如,MyTasks
  • 单击OK按钮
  • 展开“任务计划程序库”分支,并选择MyTasks文件夹
  • 单击“操作”菜单
  • 选择创建基本任务选项
  • 在“名称”字段中,键入任务的简短描述性名称
  • 单击“下一步”按钮
  • 选择每日选项
  • 单击“下一步”按钮
  • 选择启动程序选项以执行脚本/Excel文件
  • 在“程序/脚本”字段中,指定Excel文件的路径
  • 单击Finish按钮
  • 你完了

    而且,你不会后悔的。我敢打赌,您将开始更频繁地在其他自动化中使用任务调度器,因为它具有各种触发器,并且独立于任何正在运行或未运行的应用程序

    有关Excel的简短说明

    不管怎样,Excel在长时间的意外经历后有挂断的倾向,很难说为什么。在我个人看来,这是一个如此巨大但非常优秀的应用程序,以至于多年来开发人员都在琢磨如何解决此类问题。然而,微软的主要关注点是使一切变得更简单、更直观和云集成

    最重要的是,VBA早就被放弃了,被微软视为遗留解决方案。尽管自v。2010年,未包括其他功能。如果我没有弄错的话,在MS Office软件包中,它仍然是版本6.0。他们只是没有扼杀它,因为对于许多企业来说,它们依赖于(有时是优秀的、非常专业的)重要的宏,而这些宏不能轻易地被用JS编写的新的扩展范例所取代(或者根本不能),以便在任何地方都能工作


    祝你好运!你可能会从阅读中受益还要确保所有
    范围
    单元格
    对象都引用工作簿和工作表。否则Excel会猜测您所指的工作簿和工作表,它可能会猜错。不要给Excel留出猜测的空间,要尽可能精确。例如,
    wb.工作表(“Sheet1”)。范围
    谢谢。这是一个非常好的观点