Есть программа которая каждый день создает отчет примерно с таким названием "отчет 20.08.2020_19.35.xlsx". Этот отчет нужно привести к более читаемому и красивому виду и вставить в него шапку из другого екселевского файла.
Я сделал макрос, который все это делает, но вот проблема, при создании макроса с помощью макрорекордера создаётся макрос, в котором используется имя файла, с которым работает макрос. Если затем применить полученный макрос к файлу, у которого другое имя, то макрос не работает. А в следующий день отчет будет называться по другому.
Я в макросе указал имя "1.xlsx" и перед запуском макроса переименовываю файл в "1.xlsx".
Можно сделать так, чтобы макрос работал с любым именем файла?
Действия пользователя по работе с макросом:
1. Переименовываю свежесозданнный "отчет 25.08.2020_16.35.xlsx" в "1.xlsx".
2. Запускаю макрос.
3. Получаю готовый документ. Вручную "сохраняю как".
4. Вручную закрываю "другой файл.xlsx", который открылся в процессе работы макроса.
Ниже краткий пример такого макроса.
Макрос
Sub Макрос1()
Workbooks.Open Filename:="C:\Users\User\Desktop\другой файл.xlsx"
Range("C4:H12").Select
Selection.Copy
Windows("отчет 20.08.2020_19.35.xlsx").Activate
ActiveSheet.Paste
Range("K21").Select
ActiveWindow.Close
End Sub
В программировании можно использовать имена. Можно назначить имя файлу, листу и затем можно обращаться к файлу, листу по имени. Такое имя называется "ссылка".
Не всегда есть необходимость выделять диапазон, чтобы с ним что-то сделать: можно сделать действия с диапазоном без использования "Selection".
Код
Sub Макрос()
Dim КнигаОтчёт As Workbook, КнигаДругая As Workbook
Dim ЛистОтчёт As Worksheet, ЛистДругой As Worksheet
'1. Присваиваем имя "КнигаОтчёт" активному файлу. Далее макрос будет
' обращаться к этому файлу по этому имени.
' Активный файл - это файл, который пользователь видит на мониторе.
' Перед запуском макроса активным файлом должен быть отчёт.
Set КнигаОтчёт = ActiveWorkbook
'2. Присваиваем имя "ЛистОтчёт" активному листу. Далее макрос будет
' обращаться к этому листу по этоиму имени.
' Активный лист - это лист, который пользователь видит на мониторе.
Set ЛистОтчёт = ActiveSheet
'3. Открытие другого файла. Ему присваиваем имя "КнигаДругая".
Set КнигаДругая = Workbooks.Open(Filename:="C:\Users\User\Desktop\другой файл.xlsx")
'4. Присваиваем имя "ЛистДругой" активному листу другого файла.
Set ЛистДругой = КнигаДругая.ActiveSheet
'5. Копирование фрагмента из одного файла в другой.
ЛистДругой.Range("C4:H12").Copy
ЛистОтчёт.Paste
'6. Переход в отчёт, чтобы выделить ячейку "K21".
КнигаОтчёт.Activate
'7. Выделение ячейки.
ЛистОтчёт.Range("K21").Select
'8. Закрытие другого файла.
КнигаДругая.Close SaveChanges:=False
End Sub
Все работает.
Спасибо большое за помощь, я получил бесценный опыт.