使用ADODB访问打开的xls文件

尽pipe我一直在使用VBA for Excel很长一段时间,但有一个问题是我自己无法解决的。 我已经在下面描述了,希望得到一些帮助或build议。
我正在使用Excel 2007和Windows XP,全部使用最新的补丁更新。

我经常使用下面的代码从另一个工作簿中获取数据:

Set conn = New ADODB.Connection conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=g:\source.xls;Extended Properties=Excel 8.0;" Sql = "SELECT Field1, Field2 FROM [Sheet1$]" Set rst = New ADODB.Recordset rst.Open Sql, conn, adOpenForwardOnly Worksheets("Results").Range("A2").CopyFromRecordset rst rst.Close Set rst = Nothing conn.Close Set conn = Nothing 

就像可以 – 只需连接到文件并从中获取一些数据。 因为位于通用networking驱动器(g:\ source.xls)中的源文件在另一台计算机上未打开,所以它工作得很好。
当另一台计算机上的某个用户打开该文件并尝试执行以下代码时,我注意到一件事情,我想摆脱: 我的计算机上打开源Excel文件(在只读模式)并且在closures该文件的连接之后它不closures 。 更糟的是,即使我手动closures这个源文件,它也会在我的文件中留下一些垃圾,就像从未closures过的那样:在代码执行之后看到图片(之前已经closures了源文件):
在这里输入图像描述

我开始相信这是一个无法解决的错误 – 希望我错了:)

这实际上是一个已知的错误,请参阅: http : //support.microsoft.com/default.aspx?scid=kb ;en-us;319998& Product=xlw 。 使用VBA查询打开的Excel工作簿会导致发生内存泄漏,因为即使closures连接并清除对象,引用也不会被释放。

您的Excel版本是2007或更高版本?

如果是在提供商使用Microsoft.ACE.OLEDB.12.0和您的问题解决。

[]的

使用内置的Excel引用而不是ADO连接打开Excel数据源会更好,例如:

 Dim xlApp As New Excel.Application Dim xlWrkBk As Excel.WorkBook xlApp.WorkBooks.Open FILENAME Set xlWrkBk = xlApp.ActiveWorkbook 

然后从这里出发