11

我正在尝试运行一个在多个工作表上执行功能的宏。假设我在工作表 4 上分配了宏按钮。我已经列出了我希望它逐步执行的功能:

1) 选择工作表 4 中的某些单元格并复制到工作表 4 中的相邻单元格。
2) 删除工作表 3 中的单元格
范围。 3) 剪切工作表 2 中的单元格范围,然后将此单元格范围粘贴到工作表 3 中。
4) 取范围将单独工作簿中的单元格复制到工作表 2 中。(我知道这是一个完全不同的问题,因为工作簿是自动发布的,我必须找到一种方法来链接两者。)
5)更新位于工作表 4 中的数据透视表和工作表 3。

我很想获得有关前 3 个功能的帮助。我在下面粘贴了我当前的代码。

Sub START()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet

Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")

sh4.Range("B29:B30").Select
Selection.Copy

sh4.Range("C29").Select
ActiveSheet.Paste

sh3.Range("A4:AC1000").Select
Selection.Delete

sh2.Range("A4:AC1000").Select
Selection.Copy

sh3.Range("A4").Select
ActiveSheet.Paste

End Sub

它有效......但它仅在我在正确的工作表中执行特定功能时才有效。

4

4 回答 4

15

通过删除selectselectionactivesheet,您将能够使此工作表独立

Sub START()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet

Set sh1 = ActiveWorkbook.Sheets("Brand")
Set sh2 = ActiveWorkbook.Sheets("CurrentWeek")
Set sh3 = ActiveWorkbook.Sheets("PriorWeek")
Set sh4 = ActiveWorkbook.Sheets("Pivot")

sh4.Range("B29:B30").Copy sh4.Range("C29")

sh3.Range("A4:AC1000").Delete

sh2.Range("A4:AC1000").Copy sh3.Range("A4")

End Sub
于 2012-10-24T18:01:02.503 回答
6

你有一个很好的开始。再细化一点,你就会拥有它。

.Select基本上,至少在这种情况下,不需要您的范围(工作表、工作簿等)。您可以直接使用它们,并使用Copy将复制它们的目标提供。

请参见下面的代码:

Sub START()

Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim sh3 As Worksheet
Dim sh4 As Worksheet
Dim wkb As Workbook

Set wkb = Workbooks("wkbName") '-> best to call workbooks by name, as opposed to "ActiveWorkbook", also best to set it to object

With wkb '-> now we can work with this object directly and succinctly

    Set sh1 = .Sheets("Brand")
    Set sh2 = .Sheets("CurrentWeek")
    Set sh3 = .Sheets("PriorWeek")
    Set sh4 = .Sheets("Pivot")

    sh4.Range("B29:B30").Copy sh4.Range("C29")

    'sh3.Range("A4:AC1000").Delete -> you don't need this if you are overwritting it

    sh2.Range("A4:AC1000").Copy sh3.Range("A4")

End With

End Sub
于 2012-10-24T18:01:01.420 回答
0

sheet("name1").range("B29:B30").copy Destination:=sheets("name2").range("C29")

假设工作表名称为 name1 和 name2,将从一个工作表复制到另一个工作表

于 2015-05-01T18:43:32.933 回答
-2
Sub START()

Sheet("Pivot").Range("B29:B30").Copy Sheet("Pivot").Range("C29")
Sheet("CurrentWeek").Range("A4:AC1000").Copy Sheet("PriorWeek").Range("A4")

End Sub
于 2013-07-20T10:16:30.107 回答