2011-04-22 39 views
0

我在Excel 2003文檔中使用VBA宏通過ADO查詢另一個Excel 2003文檔。該代碼看起來是這樣的:如何讓Excel在使用ADO訪問的另一個Excel文件上釋放其鎖定?

Dim vRecordSet As ADODB.Recordset 

    vWorkbookConnectionString = _ 
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SomeExcelFile.xls;Extended Properties=Excel 8.0;" 

    Set vRecordSet = New ADODB.Recordset 

    Call vRecordSet.Open(Source:=strSQl, ActiveConnection:=vWorkbookConnectionString, _ 
    CursorType:=adOpenForwardOnly, LockType:=adLockReadOnly, Options:=adCmdText) 

vRecordSet稍後用於創建PivotCache。

我的目標是在用戶關閉運行此代碼的工作簿時,刪除該RecordSet(上例中爲C:\ SomeExcelFile.xls)源的文件。

運行此ADO查詢時文件被鎖定,並且在工作簿關閉之後似乎不會被釋放。調用vRecordSet.Close不會釋放它。

是否有可能強制Excel發佈其對該文件的鎖定,以便我可以通過編程方式將其刪除?

回答

1

你嘗試添加以下的vRecordSet.Close通話後,看它是否有差別:

Set vRecordSet = Nothing 
+0

我對VBA相當陌生,而且我不太明白這會帶來什麼好處。你是說強迫RecordSet被垃圾收集可能會導致文件上的鎖被釋放? – Syntactic 2011-04-22 21:27:50

+0

我剛剛看到的情況下,將它設置爲無效可以有所作爲。它可能會或可能不會幫助你的情況。你試過了嗎?結果是什麼? – dcp 2011-04-25 08:55:30

+0

它的工作原理!看起來像GCing的Recordset does * * *關閉它沒有。 – Syntactic 2011-04-25 18:08:24

0

未經測試的巫毒:用一個變量來保存ADODB.Connection,通過這個打開,同時關閉記錄集和連接。

相關問題