![Как оптимизировать макрос](https://rvso.com/image/1641917/%D0%9A%D0%B0%D0%BA%20%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D1%81.png)
Каждый год у меня есть новый годовой файл Excel, который имеет ту же структуру, что и предыдущий год. В предыдущем году я определил строки и столбцы, которые я должен прочитать со всех листов этого файла Excel, и я возвращаю результат вычисления в тот же файл.
На новый год мне нужно повторить всю процедуру. Есть ли способ перенести ссылки и формулы из предыдущего года в следующий без ручной перепривязки данных?
Это записанный макрос:
Sub NewYearData()
' NewYearData Makronaredba
Windows("PreviousYear.xlsm").Activate
Sheets("1.A.1.a.ii Liquid Fuels").Select
Range("C16:AH18").Select
Selection.Copy
Application.WindowState = xlNormal
Windows("CurrentYear2.xlsx").Activate
Range("C16").Select
ActiveSheet.Paste Link:=True
ActiveSheet.Paste
Windows("PreviousYear.xlsm").Activate
Sheets("1.A.1.a.ii Gaseous Fuels Gaseo").Select
Range("C16:AH18").Select
Application.CutCopyMode = False
Selection.Copy
Windows("CurrentYear2.xlsx").Activate
Sheets("1.A.1.a.ii Gaseous Fuels Gaseo").Select
Range("C16:AH18").Select
ActiveSheet.Paste
End Sub
Как сделать это для всех листов?
- Для всех листов с одинаковым именем в обоих файлах
- найти ячейки, где ссылка
- копировать ссылку из исходного файла в целевой файл в том же месте
решение1
Это предполагает, что у нас есть те же самые листы(с теми же именами) вобарабочие тетради. Мы определяем некоторые объекты и используем цикл:
Sub NewYearData()
Dim wb1 As Workbook, wb2 As Workbook
Dim r1 As Range, r2 As Range
Dim addy As String, sh As Worksheet
Dim shName As String
Set wb1 = Workbooks("PreviousYear.xlsm")
Set wb2 = Workbooks("CurrentYear2.xlsx")
addy = "C16:AH18"
For Each sh In wb1.Sheets
shName = sh.Name
Set r1 = sh.Range(addy)
Set r2 = wb2.Sheets(shName).Range(addy)
r1.Copy r2
Next sh
End Sub