我尝试编写一个简单的宏来将数据从多个标签复制/粘贴到摘要标签中。我的问题是,对于每个项目,示例选项卡都将更改名称。一旦我更改了示例选项卡的名称,我的宏就不再有效了。
有没有办法链接到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
答案 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