2014-07-20 61 views
0

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

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 
+0

@Nanashi - 这让我想起了一些事情。 http://stackoverflow.com/questions/24761536/ – dcromley

回答

2

两件事情:

  1. 资格你的床单。因为该宏是从Sheet2中的按钮调用的,所以范围从该表中实例化而不是Sheet1
  2. 如果您打算使用R1C1表示法公式,请使用.FormulaR1C1而不是.Value

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

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 

让我们知道这是否有帮助。

+0

谢谢你Nanashi! –

相关问题