Vbscript 如果Excel处于打开状态,则

Vbscript 如果Excel处于打开状态,则,vbscript,Vbscript,我有一个Sub,它设置了一个Excel实例(如下所示),在该Sub中,我运行一个循环来设置另一个Sub Sub A Set objExcel = CreateObject("Excel.Application") Set objExcelWb = objExcel.Workbooks.Open("S:\Scripting\0711_Settlement2_Copy.xlsm") Set objExcelSht = objExcelWb.Worksheet

我有一个Sub,它设置了一个Excel实例(如下所示),在该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
在下一小节中,我希望它仅在上面的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

不起作用。有人可以帮忙吗?

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

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
Do While objExcel.CountA(objExcelSht.Rows(rw))>0
出错时继续下一步
子结构objExcelSht.行(rw)
如果错误号为0,则
msgbox“第行出错”&rw&vbCrLf&err.Description
退出do
如果结束
错误转到0
rw=rw+1
环
VBA有
错误转到
,vbs没有。因此,请注意,下一步继续出错时,
仍将尝试执行每一行代码,并且不会在第一次出错时停止。

这是否合适取决于您的实际代码,例如,如果您在多张工作表上工作,即使在出现错误后是否需要继续循环等。

我不清楚。您正在打开工作簿并使用工作表。您可以在那里添加错误处理。调用第二个子对象时,传递一个
范围
对象,如果工作簿已打开,则无需再次检查该对象,也无需再次打开Excel。您只需使用工作表或范围对象即可。我是错误处理的新手。如果我在从excel读取和写入数据时关闭excel,我要做的就是防止出现WSH错误。如果在循环运行时关闭excel,则会得到:需要对象:“rw.Cells”错误。我想防止出现这个错误,我只想运行我的subTerminateScript。我搞不懂!据我所知,Excel应用程序对象没有打开的属性或方法。如果GetObect返回一个对象,则excel正在运行。Excel对象也没有CountA属性,也许您打算在工作簿或工作表中循环?