首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel宏在不同工作表上运行

Excel宏在不同工作表上运行
EN

Stack Overflow用户
提问于 2014-07-20 13:29:44
回答 1查看 194关注 0票数 0

我有一个应该在SHEET1上运行的宏。然后,我有另一个工作表(SHEET2),它持有一个按钮供用户单击,以便能够运行宏。我的问题是,我在我的按钮中分配了宏,但是什么都没有发生。我尝试添加这一行Sheet1.Range("A2:A" & lastrow),但是宏停止并完全完成任务。我的密码有什么问题吗?请帮帮忙。

代码语言:javascript
运行
复制
Sub DC1()
  Dim lastrow&, rng1 As Range, rng2 As Range
  lastrow = Cells(Rows.Count, 1).End(xlUp).Row
  Set rng1 = Range("A2:A" & lastrow).SpecialCells(xlCellTypeConstants)
  Set rng2 = rng1.Offset(0, 6)
  rng2.Value = "=AVERAGE(RC[-6]:RC[-2])"
  Set rng2 = rng1.Offset(0, 7)
  rng2.Value = "=SUM(RC[-5]:RC[-1])*0.5"
  Set rng2 = rng1.Offset(0, 9)
  rng2.Value = "=CONCATENATE(RC[-9],RC[-8],RC[-7],RC[-6],RC[-5],RC[-4])"
End Sub
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-20 13:49:36

有两件事:

  1. 为你的床单做好准备。因为宏是从Sheet2中的一个按钮调用的,所以范围是从该工作表中实例化的,而不是Sheet1
  2. 如果要使用.FormulaR1C1表示法公式,则使用R1C1而不是.Value

下面是您的代码的固定版本。

代码语言:javascript
运行
复制
Sub DC1()

    Dim WS1 As Worksheet
    Dim LastRow As Long, Rng1 As Range, Rng2 As Range

    Set WS1 = ThisWorkbook.Sheets("Sheet1")

    With WS1
        LastRow = .Range("A" & .Rows.Count).End(xlUp).Row
        Set Rng1 = .Range("A2:A" & LastRow).SpecialCells(xlCellTypeConstants)
        Set Rng2 = Rng1.Offset(0,6)
        Rng2.FormulaR1C1 = "=AVERAGE(RC[-6]:RC[-2])"
        ' ... Other code.
    End With

End Sub

如果这有帮助的话请告诉我们。

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

https://stackoverflow.com/questions/24850968

复制
相关文章

相似问题

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