首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨多个工作表的VBA宏

跨多个工作表的VBA宏
EN

Stack Overflow用户
提问于 2012-10-25 01:55:27
回答 4查看 92K关注 0票数 11

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

1)选择工作表4中的某些单元格,并复制到工作表4中的相邻单元格。

2)删除工作表3中的单元格范围。

3)剪切工作表2中的单元格区域,然后将此单元格区域粘贴到工作表3中。

4)从单独的工作簿中提取单元格范围并复制到工作表2中。(我知道这是一个完全不同的问题,因为工作簿是自动发布的,我必须找到将两者链接起来的方法。)

5)更新工作表4和工作表3中的透视表。

我希望在这的前3个功能上有帮助。我已经在下面粘贴了我当前的代码。

代码语言:javascript
复制
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

它起作用了..。但只有当我在正确的工作表中执行特定功能时,它才有效。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-10-25 02:01:03

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

代码语言:javascript
复制
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
票数 15
EN

Stack Overflow用户

发布于 2012-10-25 02:01:01

你有一个很好的开始。只要稍加改进,你就会拥有它。

基本上,没有必要.Select你的范围(工作表,工作簿等),至少在这种情况下是这样。您可以直接使用它们,并使用Copy提供它们将被复制到的目标位置。

请看下面的代码:

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2015-05-02 02:43:33

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13054960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档