如何优化宏

如何优化宏

每年我都会有一个新的年度 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

相关内容