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?
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
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
Ça marche! On dirait que GCing the Recordset fait * quelque chose * que la fermeture ne le fait pas. – Syntactic