如何使用vbscript正确关闭excel

时间:2014-04-01 00:59:41

标签: vbscript

这是子

Sub test()
With ThisWorkbook
.Worksheets("Sheet1").Range("A1").Value = 5
.Save
End With
End Sub

这是启动sub

的vbscript
Dim ObjExcel, ObjWB
Set ObjExcel = CreateObject("excel.application")
Set ObjWB = ObjExcel.Workbooks.Open("C:\Users\Owner\Desktop\Book1.xlsm")
ObjExcel.Visible = True
ObjExcel.Run "Book1.xlsm!test"
ObjWB.Close False

Set ObjExcel = Nothing ' Should I use  ObjExcel.Quit instead ?
'if i use both I get the error

我收到以下vbscript运行时错误

enter image description here

2 个答案:

答案 0 :(得分:3)

我出去了,因为您发布的代码显然引发错误(至少根据代码中的注释),但很可能是您使用过的ObjExcel.QuitSet ObjExcel = Nothing的顺序错误。如果您在调用ObjExcel之前将Nothing设置为ObjExcel.Quit,则变量不再包含具有Quit方法的对象,从而引发您观察到的错误。

如果要终止Excel,则必须使用ObjExcel.Quit。没有它,即使脚本终止,程序也会继续运行。但是,您必须在将变量设置为Nothing之前调用该方法(这是可选的),因此请更改此项:

Set ObjExcel = Nothing

要么:

ObjExcel.Quit
Set ObjExcel = Nothing

或者这个:

ObjExcel.Quit

答案 1 :(得分:0)

我发现如果我还没有将打开的工作簿设置为Nothing,我最终得到了我的电子表格的临时副本,导致它被锁定。它还使Excel任务在任务管理器中运行和可查看。 因此,完成我使用的电子表格后:

public void updateOnLinearView(ViewGroup parentView) {
    // Note reusing child views if there are any
    for (int pos = 0; pos < getCount(); pos++) {
        View existingView = parentView.getChildAt(pos);
        if (existingView != null) getView(pos, existingView, parentView);
        else parentView.addView(getView(pos, null, parentView));
    }
    while (parentView.getChildCount() > getCount())
        parentView.removeViewAt(getCount());
}