2015-06-24 4 views
0

Я пишу модуль, который открывает каждую книгу в папке и копирует с нее некоторую информацию. Он работает гладко на большинстве файлов в папке, но некоторые книги появляются с разными именами при открытии модуля. Мой код выглядит следующим образомПереименование книги при открытии

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 

Это тянет данные из первых 45 книг, а затем возвращает «Ошибка выполнения 9 индекса вне диапазона.» Открывается рабочая книга с именем, считающимся именем файла с двумя, казалось бы, случайными цифрами. Когда я вручную открываю файл, имя читается как имя файла.

+0

делись мои ответ решить вашу проблему? Случайные символы в названии сделают «Рабочие книги (форму). Закрытие« сбой ». Я также заметил, что ваш оператор 'Sort' ссылается на 2 разных листа, когда вы указываете ключи. Заметьте 'Таблицы (2)' и 'Таблицы (1)' – joehanna

ответ

0

Вместо того, чтобы использовать данные Workbooks(form) для доступа к данным, вы должны просто использовать ActiveWorkbook после того, как вы открыли каждый файл. Вы также можете закрыть открытую книгу с ActiveWorkbook.Close

Вы можете также определить переменную следующим образом: - Dim wb As Workbook, а затем присвоить переменную с открытой книги, как это: -

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

Тогда вы можете ссылаться на рабочая тетрадь с использованием wb. например

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

, а затем закрыть его, как это: -

wb.Close 

Не забудьте быть хорошим гражданином ресурсов и освободить память с этим в конце:

set wb = Nothing 
Смежные вопросы