2011-04-22 3 views
0

J'utilise une macro VBA dans un document Excel 2003 pour interroger un autre document Excel 2003 via ADO. Le code ressemble à ceci:Comment puis-je obtenir Excel pour libérer son verrou sur un autre fichier Excel que j'ai accédé en utilisant ADO?

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 est utilisé plus tard pour créer un PivotCache.

Mon but est de supprimer le fichier qui est la source de ce RecordSet (C: \ SomeExcelFile.xls dans l'exemple ci-dessus) lorsque l'utilisateur ferme le classeur à partir duquel ce code est exécuté.

Le fichier est verrouillé lorsque cette requête ADO est exécutée et il ne semble pas être publié avant la fermeture du classeur. Appeler vRecordSet.Close ne le libère pas.

Est-il possible de forcer Excel à libérer son verrou sur ce fichier afin que je puisse le supprimer par programme?

Répondre

1

Avez-vous essayé d'ajouter ce qui suit après votre appel vRecordSet.Close pour voir si cela fait une différence:

Set vRecordSet = Nothing 
+0

Je suis plutôt nouveau à VBA, et je ne comprends pas vraiment quel avantage cela apporterait. Êtes-vous en train de dire que forcer RecordSet à être garbage-collecté pourrait provoquer le verrouillage du fichier à être libéré? – Syntactic

+0

Je viens de voir des situations où la mise à zéro peut faire la différence. Cela peut ou peut ne pas aider dans votre cas. Est-ce que tu l'as essayé? Quel a été le résultat? – dcp

+0

Ça marche! On dirait que GCing the Recordset fait * quelque chose * que la fermeture ne le fait pas. – Syntactic

0

Voodoo Untested: utiliser une variable pour tenir le ADODB.Connection, passer cela pour ouvrir, fermer à la fois la le jeu d'enregistrements et la connexion.

Questions connexes