2016-06-21 75 views
1

我有一些工作簿中的一些数据,我想过滤然后将过滤的数据保存到新的工作簿。功能如下:创建1300个工作簿的最快(最安全)的方法?

Sub bleh() 
    For Each i In Number 
     ~~ filter, copy, paste, save ~~ 
    Next i 
End Sub 

除了优化代码,是更快,更安全

  1. 保存每个工作表作为新的工作簿中的每个迭代
  2. 保存在当前工作簿中的每个工作表和削减整体工作簿 到最后单独的工作簿?

或者别的什么?

谢谢您的输入。

+6

安全明智没有办法我会创建1300工作表之前保存。另外,我会将单个操作放到一个单独的子文件中,以便变量可以被垃圾收集。例如。 Sub Loop()For i = 1 to 1300 Call DoSave(workbook i)Next i End Sub。 – Absinthe

+1

引用:* ...将整个工作簿切割成单独的工作簿,最后... *这将与*一样*将每个工作表保存为新的工作簿... *仅保存在...之间逻辑,你已经回答了你自己的问题;) –

+0

但要做到这一点比处理表单和分割等更快:推送变量中的值 - >将结果计算为一个长字符串 - >写入文本文件(另存为csv); ) –

回答

5

1,300个文件?忘记VBA,甚至忘记Excel互操作。

我会去一些C#或VB.NET,并且使用的OpenXML与文件的结构工作,生成内存异步的1300个OpenXML文档(即工作簿)(希望有没有几十万行),然后一旦你掌握了所有你需要知道的东西,迭代所有这些工作簿对象,并顺序地将它们保存到磁盘(可能显示一个进度条或某物)。无论如何,使异步I/O不会有所帮助。

每个文件的写入都会被包装在一个try/catch块中,并且在处理过程中抛出的任何异常都将通过记录足够的信息来处理,以便稍后识别失败的页面(可以输出到该进度栏下的锁定文本框),然后继续尝试下一个尝试。


在VBA这样做将永远运行下去:给每个工作簿4秒被创建,保存并关闭 - 宏将至少5200秒,这是相当多的一个半小时运行。

+0

我的时间仅限于手动完成工作的时间。 VBA远离VB.NET吗? – Cezary