如何在不保存excel活动的情况下在excel vba代码执行中添加暂停

时间:2016-10-27 06:12:52

标签: excel-vba vba excel

我有一个名为“MBGR”的excel文件。这是我的主要文件。现在,通过这个文件,我执行了一个批处理文件,结果,从数据库应用程序中提取了一些数据,并将其粘贴到一个名为“Volla”的新生成的excel文件中。

所以,现在我同时打开了两本工作簿。现在,我想将这个新生成的数据复制回我原来的工作簿“MGBR”。问题是数据库提取需要5秒钟,VBA代码正在向前发展。它命令擅长:

  • 激活新生成的工作簿“Volla”

  • 复制数据

  • 粘贴回原始工作簿“MGBR”

当excel重新命令激活尚未生成的“Volla”表时,数据库提取仍在进行中,因此代码崩溃。显然,如果我打破两个indendent模块中的两个进程,它工作正常,但我怎么能添加一个暂停,以便生成“Volla”表,然后启动复制命令。暂停或睡眠不起作用,因为它停止所有excel活动。为了您的评论,我附上了代码

Sub Routine()

batch = Sheets("input").Range("p3") & "\" & "Script.bat"


    Open batch For Output As #1
    Close #1

    Open batch For Output As #1
    Print #1, """" & "C:\Program Files (x86)\HEC\HEC-DSSVue\HEC-DSSVue.exe" & """" & " " & """" & path & """"
    Close #1

''Executing batch file - The batch file gets executed here and the New excel _

sheet will be generated

retval = Shell(batch, vbNormalFocus)

Windows("volla.xls").Activate '' This command gives error as workbook "Volla" 
                               '  generation was still under process

ActiveSheet.Range("a6:z1000").Copy

Windows("MGBR").Activate

With Sheets("test")

.Range("a1").PasteSpecial Paste:=xlPasteValues

End With

Application.DisplayAlerts = False

Windows("volla.xls").Close

任何帮助????

1 个答案:

答案 0 :(得分:0)

建议按如下方式拆分程序:

  1. 运行批处理文件以生成数据(excel文件),估计时间为5秒。 Routine
  2. 将新文件(volla.xls)中数据的复制粘贴运行到主文件等中。Routine_Cont
  3. 在第一个过程中,安排第二个过程在批处理完成+2秒作为错误余量的预期时间之后开始。

    Sub Routine()
        batch = Sheets("input").Range("p3") & "\" & "Script.bat"
        Open batch For Output As #1
        Close #1
    
        Open batch For Output As #1
        Print #1, """" & "C:\Program Files (x86)\HEC\HEC-DSSVue\HEC-DSSVue.exe" & """" & " " & """" & Path & """"
        Close #1
    
        ''Executing batch file - The batch file gets executed here and the New excel _
            sheet will be generated
        retval = Shell(batch, vbNormalFocus)
    
        Rem Schedule the 2nd part of this procedure to start in 5 seconds
        Application.OnTime _
            EarliestTime:=Now + TimeSerial(0, 0, 5 + 2), _
            Procedure:="Routine_Cont", Schedule:=True
    
        End Sub
    
    
    Sub Routine_Cont()
        Windows("volla.xls").Activate
        ActiveSheet.Range("a6:z1000").Copy
        Windows("MGBR").Activate
        Sheets("test").Range("a1").PasteSpecial Paste:=xlPasteValues
        Application.DisplayAlerts = False
        Windows("volla.xls").Close
        End Sub