如果Excel已打开,则

时间:2018-08-03 19:32:02

标签: vbscript

我有一个用于设置Excel实例的Sub(如下),在该Sub中,我运行一个循环来启动另一个Sub。

Sub A
    Set objExcel    = CreateObject("Excel.Application")
    Set objExcelWb  = 
    objExcel.Workbooks.Open("S:\Scripting\0711_Settlement2_Copy.xlsm")
    Set objExcelSht = objExcelWb.Worksheets("Test")

    rw = 2
    objExcel.Visible = True
    Do While objExcel.CountA(objExcelSht.Rows(rw)) > 0
        subDoWork objExcelSht.Rows(rw)
        rw = rw + 1
    Loop
End Sub

在下一个Sub中,如果上面的Excel电子表格已打开,我希望它仅运行。我正在使用以下内容:

Sub subDoWork(rw)
    Set xlApp = GetObject(, "Excel.Application")
    If xlApp.Open = True Then

        'script main body

    Else
        subTerminateScript "Script Canceled"
    End If
End Sub

无论出于何种原因

xlApp.Open

不起作用。有人可以协助吗?

1 个答案:

答案 0 :(得分:0)

例如,您可以将子调用包装到错误处理程序中。

Do While objExcel.CountA(objExcelSht.Rows(rw)) > 0

    on error resume next
        subDoWork objExcelSht.Rows(rw)
        if err.Number <> 0 then
            msgbox "an error occurred at row " & rw & vbCrLf & err.Description
            exit do
        end if
    on error goto 0

    rw = rw + 1
Loop

VBA有on error goto <label>,vbs没有。因此请注意,on error resume next仍将尝试执行每一行代码,并且不会因第一个错误而停止。
是否合适取决于您的实际代码,例如。如果您要处理多张纸,即使在出现错误等情况下仍需要继续循环。