0

首先,我只想声明我需要使用 LateBinding,因为我的程序在不同机器上运行,具有不同版本的 excel。

我在一个模块中声明了一个 Public Sub,可以调用它来为 excel 应用程序创建对象。

'Declare Public Excel Variable to Call from one place and easy manipulation
Public xlApp As Object
Public wb As Object
Public wb2 As Object
Public ws As Object
Public ws2 As Object

Public Sub InitializeExcel()
    'Create the Excel Objects
    Set xlApp = CreateObject("Excel.Application")
End Sub

然后在我创建的每个使用 excel 应用程序的子例程中,我调用InitializeExcel并在每一端执行以下操作:

On Error Resume Next
xlApp.Quit
Set xlApp = Nothing
Set wb = Nothing
Set wb2 = Nothing
Set ws = Nothing
Set ws2 = Nothing    

我现在的问题是:

我是否需要在每个需要 Excel 应用程序的子例程上调用InitializeExcel,或者我可以在应用程序启动时调用它一次吗?

4

1 回答 1

0

我已经测试了一些东西并得到了这些结果:

InitializeExcel每次都需要调用,因为在提到的每个子例程结束时都会将作为Excel 应用程序对象的xlapp设置为Nothing

如果我在每个子例程中删除Set xlApp = Nothing,那么我可以“重新使用”xlApp作为 Excel 应用程序对象。然而,这会导致 Excel 应用程序一直在后台运行,并且每次我打开一个新工作簿时,都会运行另一个 Excel 应用程序实例。

所以我想,最好的方法是我调用的初始设置,InitializeExcel然后将所有内容设置Nothing为调用过程的每个例程。

于 2013-04-19T02:50:42.583 回答