我有一个名为“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
任何帮助????
答案 0 :(得分:0)
建议按如下方式拆分程序:
Routine
) Routine_Cont
) 在第一个过程中,安排第二个过程在批处理完成+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