等待vba中的计算时间

时间:2017-07-10 10:08:14

标签: excel vba

我想使用vba为数据运行循环(2010,2011)(2011,2012)(2012,2013)...逐个创建新工作簿。

但是这里有一个问题,当我们输入参数Current:Previous:时,我们需要等待一段时间来计算公式(它在Bloomberg终端上),如果我们创建或立即复制工作表中的数据,它可能是空的或(数据请求)。那么我该如何解决这个问题呢?

enter image description here

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以便为原始工作簿提供足够的时间进行计算?

2 个答案:

答案 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