Excel宏在另一个工作表上运行

时间:2014-07-20 13:29:44

标签: vba excel-vba excel

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

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

1 个答案:

答案 0 :(得分:2)

两件事:

  1. 确认您的床单。因为从Sheet2中的按钮调用宏,所以范围是从该工作表而不是Sheet1实例化的。
  2. 如果您要使用.FormulaR1C1符号公式,请使用.Value代替R1C1
  3. 这是您的代码的固定版本。

    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
    

    如果有帮助,请告诉我们。