Как оптимизировать макрос

Как оптимизировать макрос

Каждый год у меня есть новый годовой файл 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. Для всех листов с одинаковым именем в обоих файлах
  2. найти ячейки, где ссылка
  3. копировать ссылку из исходного файла в целевой файл в том же месте

решение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

Связанный контент