![So optimieren Sie Makros](https://rvso.com/image/1641917/So%20optimieren%20Sie%20Makros.png)
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?
- Für alle Blätter mit gleichem Namen in beiden Dateien
- Suche nach Zellen, in denen der Verweis
- 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