【问题标题】:VBscript and Excel: Opening and closing Excel objects - Arraylist preventing closing of objectVBscript 和 Excel:打开和关闭 Excel 对象 - 防止关闭对象的 Arraylist
【发布时间】:2013-11-07 14:28:30
【问题描述】:

我的 vbscript 创建 Excel 对象并从 Excel 文件读取时遇到问题。

vbscript 从 Excel 宏执行,然后创建并打开 Excel 文件并从中读取。问题是 Excel 对象并非总是关闭,即使我正在尝试关闭它。

这是来自 vbscript 的代码:

Set ExcelObject = createobject("Excel.Application")
ExcelObject.workbooks.open testWorkBookPath

Set testActionArray = CreateObject( "System.Collections.ArrayList" )

Function getTestsCaseActions (testsPath, esheet, row, col)
    Set my_sheet = ExcelObject.sheets.item(esheet)  

    tempArray = array(my_sheet.cells(row, col-2), "")
    testActionArray.Add tempArray

    Do While my_sheet.cells(row, col).Value <> ""
        tempArray = array(my_sheet.cells(row, col), my_sheet.cells(row+1, col))
        testActionArray.Add tempArray
        col = col+1
    Loop
End Function

getTestsCaseActions testWorkBookPath, testCaseSheet, 3, 4

ExcelObject.Quit

现在,如果我运行上述代码并观察进程资源管理器,则会在脚本启动时生成一个新的 Excel 进程,然后按预期关闭。

但是,如果我在运行函数后在 ExcelObject.Quit 行之前插入此代码:

For Each ArrayItem in testActionArray
    IF ArrayItem(1) = "" Then
        Wscript.Echo ArrayItem(0)
    Else
        Wscript.Echo ArrayItem(0) & " -> " & ArrayItem(1)
    End If
Next

ExcelObject.Quit (STILL HERE)

然后生成的进程不会退出,并且进程列表会不断增长,直到 Excel 完全失效。

我不明白这个;最后一点代码所做的就是遍历 ArrayList 并打印内容。为什么进程没有退出?

编辑:似乎至少有一些 Excel 对象最终会从 Process Explorer 中消失,但这大约需要 20-30 分钟。这只是其中的一小部分——大多数还在那里。至少我目前的列表已经缩小了一些,但仍有大约 15 个 Excel 进程在运行。

此外,突然出现以下消息:

File Now Available
'filename.xlsm ' is now available for editing. Choose Read-Write to open it for editing.

【问题讨论】:

  • Excel 是否可能认为正在编辑工作簿?可能 Excel 正试图显示“是否要保存更改”对话框。在退出之前尝试dim book: for each book in ExcelObject.Workbooks: book.saved = true: next 之类的东西。
  • 看来“oracle 认证专家”发布的那句话有帮助。我会保留一段时间,看看进程浏览器。
  • oracle 认证专家:据我所知,您的建议有效。如果您将其添加为答案,我会给它正确的信用。

标签: excel vbscript arraylist


【解决方案1】:

这条线似乎有帮助。它并没有完全删除所有额外的进程,但数量会增长到五个,然后又回到两个,依此类推。所以效果很好。

dim book: for each book in ExcelObject.Workbooks: book.saved = true: next 

【讨论】:

    猜你喜欢
    • 2014-03-20
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2016-12-23
    • 2018-01-11
    相关资源
    最近更新 更多