复制并粘贴将更改名称的工作表的宏

时间:2015-02-16 23:08:11

标签: excel vba

我尝试编写一个简单的宏来将数据从多个标签复制/粘贴到摘要标签中。我的问题是,对于每个项目,示例选项卡都将更改名称。一旦我更改了示例选项卡的名称,我的宏就不再有效了。

有没有办法链接到Sheet 1,Sheet 2,Sheet 3 ...等,而不是每次都更改宏?以下是我的一些代码,我称之为Sample,或Sample(2)是需要更改每个项目的部分。

提前致谢!

Sheets("Sample").Select
    Range("B15:B29").Select
    Selection.Copy
    Sheets("Data Summary").Select
    Range("B15").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Sheets("Sample (2)").Select
    Range("B15:B29").Select
    Application.CutCopyMode = False
    Selection.Copy
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Data Summary").Select
    Range("C15").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

1 个答案:

答案 0 :(得分:1)

这不是最佳解决方案,但它应该有效。在运行宏之前,您需要确保摘要表是活动工作表。

Dim Summary As Worksheet: Set Summary = ActiveSheet
Sheets("Sample").Select
Range("B15:B29").Select
Selection.Copy
Summary.Select
Range("B15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Sheets("Sample (2)").Select
Range("B15:B29").Select
Application.CutCopyMode = False
Selection.Copy
Application.CutCopyMode = False
Selection.Copy
Summary.Select
Range("C15").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

这样做是存储对活动工作表(您的摘要)的引用,并在复制数据时使用该引用来调用工作表。

创建对工作表的引用(Dim Sheet As Worksheet,然后为其分配工作表)允许您访问该工作表上的数据,而无需先激活它,这有助于简化代码。以下示例应与上面的示例具有相同的结果。摘要表在运行之前仍需要处于活动状态。

Dim Summary As Worksheet: Set Summary = ActiveSheet
Dim S1 As Worksheet: Set S1 = ThisWorkbook.Worksheets("Sample")
Dim S2 As Worksheet: Set S2 = ThisWorkbook.Worksheets("Sample (2)")

Application.ScreenUpdating = False

S1.Range("B15:B29").Copy
Summary.Range("B15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


S2.Range("B15:B29").Copy
Summary.Range("C15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

Application.ScreenUpdating = True

更多例子!这个允许你预先定义你有多少“样本”表,而不必单独编码(希望,没有测试)

Dim Summary As Worksheet: Set Summary = ActiveSheet
Dim Source As Worksheet
Dim Index As Integer
Dim Name As String

Application.ScreenUpdating = False

' index represents the range of your sample sheets
' below my example assumes you have 5
For Index = 1 To 5
    ' generate the name of the worksheet
    Name = "Sample" & IIf(Index > 1, " (" & Index & ")", "")
    Set Source = ThisWorkbook.Worksheets(Name)
    Source.Range("B15:B29").Copy
    ' using .Cells instead of .Range allows you to reference cells numerically
    ' so below its row 15 and the column changes depending on the index
    ' the +1 is there as your example starts at column B
    Summary.Cells(15, Index + 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Next Index

Application.ScreenUpdating = True