我想使用vba为数据运行循环(2010,2011)(2011,2012)(2012,2013)...逐个创建新工作簿。
但是这里有一个问题,当我们输入参数Current:
和Previous:
时,我们需要等待一段时间来计算公式(它在Bloomberg终端上),如果我们创建或立即复制工作表中的数据,它可能是空的或(数据请求)。那么我该如何解决这个问题呢?
Sub Copy()
For i = 2015 To 2017
ThisWorkbook.Activate
Range("C8") = i
Range("C9") = i + 1
Dim wb As Workbook
Set wb = Workbooks.Add
ThisWorkbook.Sheets("Sheet1").Copy Before:=wb.Sheets(1)
wb.SaveAs "C:\Users\user\Desktop\VBA test\" & i & ".xlsx"
Next i
End Sub
我的问题是
1.如何保存价值?
2.在这种情况下,新书总是空sheet1
而复制的sheet1(1)
我只能复制sheet1
吗?
3.如何在创建新工作簿时关闭它们或者不要让它们打开(在这种情况下,我有很多已打开的工作簿)
4.如何保留语法Range("C9") = i + 1
以便为原始工作簿提供足够的时间进行计算?
答案 0 :(得分:1)
1
ActiveSheet.Cells.Copy
ActiveSheet.Cells.PasteSpecial Paste:=xlPasteValues
ActiveSheet.Cells.PasteSpecial Paste:=xlPasteFormats
2
ActiveSheet.Copy
3
ActiveWorkbook.Close
4
Application.Wait (Now + TimeValue("00:00:10"))'wait 10 seconds
总结一下:
Sub Copy()
Application.ScreenUpdating = False
For i = 2015 To 2017
ThisWorkbook.Activate
Range("C8") = i
Range("C9") = i + 1
Application.Wait (Now + TimeValue("00:00:10"))'wait 10 seconds
Dim wb As Workbook
Dim ws As Worksheet
ThisWorkbook.Sheets("Sheet1").Copy
Set wb = ActiveWorkbook
Set ws = ActiveSheet
ws.Cells.Copy
ws.Cells.PasteSpecial Paste:=xlPasteValues
ws.Cells.PasteSpecial Paste:=xlPasteFormats
wb.SaveAs "C:\Users\user\Desktop\VBA test\" & i & ".xlsx"
wb.Close
Next i
Application.ScreenUpdating = True
End Sub
我从旧的宏中获取了这些部分,但应该可以正常工作。
我添加了Application.ScreenUpdating = False/True
。始终在屏幕上进行大量更改的宏中使用它(删除/插入行/列,打开/关闭工作簿等)。
答案 1 :(得分:0)
猜测......试着写两次Calculate
,它会减慢循环速度,因此可能没问题:
Option Explicit
Public Sub TestMe()
Dim i As Long
For i = 1 To 5
Calculate
Worksheets(i).Copy After:=Worksheets(i + 1)
Calculate
Next i
End Sub