So optimieren Sie Makros

So optimieren Sie Makros

Jedes Jahr habe ich eine neue jährliche Excel-Datei, die dieselbe Struktur wie im Vorjahr hat. Im Vorjahr habe ich Zeilen und Spalten definiert, die ich aus allen Blättern dieser Excel-Datei lesen muss, und ich gebe das Berechnungsergebnis in dieselbe Datei zurück.

Im neuen Jahr muss ich den gesamten Vorgang wiederholen. Gibt es eine Möglichkeit, Links und Formeln vom Vorjahr ins nächste zu übertragen, ohne die Daten manuell neu zu verknüpfen?

Dies ist ein aufgezeichnetes Makro:

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

Wie schafft man es, alle Blätter zu erreichen?

  1. Für alle Blätter mit gleichem Namen in beiden Dateien
  2. Suche nach Zellen, in denen der Verweis
  3. Kopiere die Referenz von der Quelldatei in die Zieldatei am gleichen Speicherort.

Antwort1

Dies setzt voraus, dass wir die gleichen Blätter haben(mit den gleichen Namen) InbeideArbeitsmappen. Wir definieren einige Objekte und verwenden eine Schleife:

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

verwandte Informationen