Renommer le classur lorsqu'il est ouvert

J'écris un module qui ouvre chaque classur dans un dossier et en copy des informations. Il fonctionne correctement sur la plupart des files du dossier, mais certains classurs apparaissent avec différents noms lorsqu'ils sont ouverts par le module. Mon code est le suivant

Sub AutoUpdate() Application.ScreenUpdating = False Application.DisplayAlerts = False Sheets(1).Cells(1, 10).Value = Now() 'refreshes timestamp Dim counter As Integer Dim form form = Dir("Macintosh HD:Users:user:Documents:Folder:") 'Finds first form in folder counter = 1 Do Until form = "" Workbooks.Open ("Macintosh HD:Users:user:Documents:Folder:" & form) Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 1).Value = Workbooks(form).Sheets(1).Range("D3").Value Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 2).Value = Workbooks(form).Sheets(1).Range("D5").Value Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 3).Value = Workbooks(form).Sheets(1).Range("D1").Value Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 4).Value = Workbooks(form).Sheets(1).Range("D2").Value Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 5).Value = Workbooks(form).Sheets(1).Range("L69").Value Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 6).Value = Workbooks(form).Sheets(1).Range("K36").Value Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 7).Value = Workbooks(form).Sheets(1).Range("C37").Value Workbooks(form).Close counter = counter + 1 form = Dir 'cycles through all forms Loop Workbooks("Inventory.xlsm").Sheets(2).Range("A:G").Sort Key1:=Workbooks("Inventory.xlsm").Sheets(2).Range("A:A"), Order1:=xlAscending, Key2:=Workbooks("Inventory.xlsm").Sheets(1).Range("C:C"), Order2:=xlAscending, Orientation:=xlSortRows Application.ScreenUpdating = True Application.DisplayAlerts = False End Sub 

Cela tire datatables des 45 premiers classurs, puis renvoie "l'erreur d'exécution 9 sous-indice hors de scope". Le classur ouvert apparaît avec la lecture du nom en tant que nom de file avec deux numbers apparemment randoms ajoutés. Lorsque j'ouvre manuellement le file, le nom se lit comme le nom du file.

Au lieu d'utiliser des Workbooks(form) pour accéder aux données, vous devez simplement utiliser ActiveWorkbook après avoir ouvert chaque file. Vous pouvez également fermer le classur ouvert avec ActiveWorkbook.Close

Vous pouvez également définir une variable comme ceci: – Dim wb As Workbook , puis affectez la variable avec le classur ouvert comme ceci: –

set wb = Workbooks.Open ("Macintosh HD:Users:user:Documents:Folder:" & form)

Ensuite, vous pouvez faire reference au classur en utilisant wb . par exemple

 Workbooks("Inventory.xlsm").Sheets(2).Cells(counter, 1).Value = wb.Sheets(1).Range("D3").Value 

et fermez-le comme ceci: –

 wb.Close 

N'oubliez pas d'être un bon citoyen ressource et relâchez la memory avec ceci à la fin:

 set wb = Nothing