Excel VBA écrit des données dans le deuxième classur, mais commence à ouvrir des versions en lecture seule car "_ est déjà ouvert

J'ai un script VBA dans un classur Excel qui a trois sous-titres, que tous les deux lisent à partir d'un deuxième classur. Chacun des sous utilise l'algorithm suivant (simplifié pour distiller l'interaction avec le deuxième livre):

Public Sub EditRemote() Dim remoteDataSheet As Worksheet Dim source As Ssortingng 'Source worksheet name Dim target As Ssortingng 'Target worksheet name Dim path As Ssortingng Dim wkbName As Ssortingng source = "CountData" path = ThisWorkbook.Worksheets("Parameters").Range("B2").Value wkbName = ThisWorkbook.Worksheets("Parameters").Range("A2").Value target = "CountData" Application.EnableCancelKey = xlDisabled Set localDataSheet = ThisWorkbook.Sheets(source) If Not WorkbookIsOpen(wkbName) Then Workbooks.Open (path) End If Set remoteDataSheet = Workbooks(wkbName).Sheets(source) remoteDataSheet.Cells(1,1) = localDataSheet.Cells(1,1) remoteDataSheet.Cells(1,2) = localDataSheet.Cells(1,2) Workbooks(wkbName).Close SaveChanges:=True End Sub Function WorkbookIsOpen(targetWorkbook As Ssortingng) As Boolean Dim testBook As Workbook On Error Resume Next Set testBook = Workbooks(targetWorkbook) If Err.Number = 0 Then WorkbookIsOpen = True Else: WorkbookIsOpen = False End If End Function 

Il existe également un tableau croisé dynamic dans ce classur qui tire ses données du second file dans une connection externe de données. Le problème qui me préoccupe, c'est qu'il semble que ce n'est pas initialement mais après quelques opérations, ces sous-systèmes cessent de faire les modifications correctement et, à la place, il ouvre une copy en lecture seule du deuxième classur. Lorsque j'essaie d'ouvrir manuellement le deuxième classur, je reçois un message indiquant que le file est déjà ouvert et qu'il est verrouillé pour l'édition. À l'heure actuelle, les deux files sont locaux sur mon ordinateur et n'ont pu être ouverts par quelqu'un d'autre. Qu'est-ce que je manque pour être sûr que je peux faire fonctionner le code comme prévu?

J'ai apporté une certaine modification à votre code, l'ai couru quelques fois, et je n'ai pas eu votre message «en lecture seule».

Dans votre code, la ligne de déclaration de localDataSheet est manquante, ajouté Dim localDataSheet As Worksheet , a également ajouté Dim remoteWb As Workbook pour le classur distant.

(n'a pas modifié votre code Funtion WorkbookIsOpen ).

Code du sous-directory EditRemote

 Option Explicit Public Sub EditRemote() Dim remoteDataSheet As Worksheet Dim localDataSheet As Worksheet Dim source As Ssortingng 'Source worksheet name Dim target As Ssortingng 'Target worksheet name Dim path As Ssortingng Dim wkbName As Ssortingng Dim remoteWb As Workbook source = "CountData" path = ThisWorkbook.Worksheets("Parameters").Range("B2").Value wkbName = ThisWorkbook.Worksheets("Parameters").Range("A2").Value target = "CountData" Application.EnableCancelKey = xlDisabled Set localDataSheet = ThisWorkbook.Sheets(source) ' check if workbbok already open If Not WorkbookIsOpen(wkbName) Then Set remoteWb = Workbooks.Open(path) Else Set remoteWb = Workbooks(wkbName) ' workbook is open >> set remoteWb accordingly End If Set remoteDataSheet = remoteWb.Sheets(source) remoteDataSheet.Cells(1, 1) = localDataSheet.Cells(1, 1) remoteDataSheet.Cells(1, 2) = localDataSheet.Cells(1, 2) Workbooks(wkbName).Close SaveChanges:=True End Sub 

Juste pour vérifier datatables dans votre feuille "Paramètres" Excel, l'écran ci-dessous montre datatables que j'ai utilisées pour mes tests.

La cellule A2 contient le nom du classur "Clean".

La cellule B2 contient le nom «complet» workbbok – le path d'access + le nom du classur «propre».

entrez la description de l'image ici

Après quelques tests supplémentaires pour diagnostiquer le problème, j'ai constaté qu'il n'y avait rien de mal avec le code VBA, mais la connection de données externes au classur distant verrouillait ce classur chaque fois que je rafraîchais datatables dans le tableau pivot qui utilisait datatables externes la connection est sa source. Il ne débloque pas le file lorsqu'il est rafraîchissant, ce qui laisse le file verrouillé jusqu'à ce que je ferme le classur avec le tableau croisé dynamic. Maintenant, je dois simplement résoudre ce problème.