【问题标题】:Opening and Copying Sheets to Certain Sheets within Master Workbook在主工作簿中打开工作表并将其复制到某些工作表
【发布时间】:2019-07-28 06:13:42
【问题描述】:

我有两个工作簿:Master 和 TMT。

我要打开TMT并粘贴:

  • Sheet(1) 到主工作簿中的“TMT1”工作表
  • Sheet(2) 到 Master 工作簿中的“TMT2”工作表
  • Sheet(4) 到 Master 工作簿中的“TMT3”工作表
  • Sheet(5) 到 Master 工作簿中的“TMT4”工作表

我提供了一些冗长的代码来执行此操作,但是我希望能够循环它以使代码更高效!

这是我到目前为止的代码!

Sub TMT()
    Dim wbMaster As Workbook, wbCons As Workbook, wsMaster As Worksheet

    Application.ScreenUpdating = False
    Set wbMaster = ThisWorkbook
    Set wbTMT = Workbooks.Open("/Users/edwardlee/Downloads/TMT.xlsm")

    wbTMT.Sheets(1).Cells.Copy
    wbMaster.Sheets("TMT1").Activate
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste

    wbTMT.Sheets(2).Cells.Copy
    wbMaster.Sheets("TMT2").Activate
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste

    wbTMT.Sheets(4).Cells.Copy
    wbMaster.Sheets("TMT3").Activate
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste

    wbTMT.Sheets(5).Cells.Copy
    wbMaster.Sheets("TMT4").Activate
    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste

End Sub

【问题讨论】:

    标签: excel vba loops copy


    【解决方案1】:

    我认为 Loop 不适合,因为您对 4Th 表有不同的名称。无论如何,您需要为它们设置条件,这会使您的代码拖得比这更长。如果您要复制的工作表在行中但不是 (1,2,4,5),则可以选择循环

    但您可以通过NOT使用Select & Activate

    来优化代码

    简体:

    Sub TMT()
    
        Dim wbMaster As Workbook, wbCons As Workbook, wsMaster As Worksheet
    
        Application.ScreenUpdating = False
        Set wbMaster = ThisWorkbook
        Set wbTMT = Workbooks.Open("/Users/edwardlee/Downloads/TMT.xlsm")
    
        wbTMT.Sheets(1).Cells.Copy wbMaster.Sheets("TMT1").Range("A1")
        wbTMT.Sheets(2).Cells.Copy wbMaster.Sheets("TMT2").Range("A1")
        wbTMT.Sheets(4).Cells.Copy wbMaster.Sheets("TMT3").Range("A1")
        wbTMT.Sheets(5).Cells.Copy wbMaster.Sheets("TMT4").Range("A1")
    
        Application.ScreenUpdating = True
    
    End Sub
    

    另外,您在代码末尾缺少Application.Screenupdating


    循环是这样的:这会将数据从 wbTMT 中的 5 张纸粘贴到 wbMaster。如果数字像 (1,2,3,4) 一样同步,则将其运行到 4

    For  i = 1 to 5 
    
    wbTMT.Sheets(i).Cells.Copy wbMaster.Sheets("TMT" & i).Range("A1")
    
    Next
    

    要检查工作表编号,您可以使用属性Sheet.Index

    For each sht in wbTMT.WorkSheets
    
        If sht.Index = 3 then 
            'Blah Blah Blah
        End if 
    
    Next
    

    【讨论】:

    • 您好,感谢您的快速回复:1) 我可以在循环中使用 if 语句来查看 sheet = sheet(3) 吗? 2)那个循环看起来如何? 3) 我能够重新格式化 TMT 表,以便我可以获取前四张表,因此它将是线性的。
    • 检查答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    相关资源
    最近更新 更多