如何在活动行中的单元格上运行excel宏?

时间:2017-10-06 18:10:54

标签: excel vba excel-vba

我正在尝试制作一个宏。我有一个电子表格,我关注的是A,Q,R,S和T列。首先,我在Q列中选择一行作为宏的初始activecell。我将列Q设为0.然后,我在A列中加上一个总和公式,即对我所在的行求和R,S和T. 然后,我在列A单元格上复制并粘贴值,以便总和为值。我将列T = A列。然后我将0放在R和S列中。

以下是使用记录宏制作的初始宏,但它仅适用于我录制宏的行。我希望宏是这样的,当我在任何行上执行Ctrl-g时,它将为该行运行。

Sub Cashflow()
'
' Keyboard Shortcut: Ctrl+g
'
    ActiveCell.FormulaR1C1 = "0"
    Range("A74").Select
    ActiveCell.FormulaR1C1 = "=SUM(RC[17]:RC[19])"
    Range("A74").Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A74").Select
    Application.CutCopyMode = False
    Range("T74").Select
    ActiveCell.FormulaR1C1 = "=RC[-19]"
    Range("R74").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("S74").Select
    ActiveCell.FormulaR1C1 = "0"
    Range("T74").Select
End Sub

这是我尝试修复它的方法,但它不起作用:

 Sub Cashflow()
    '
    ' Keyboard Shortcut: Ctrl+g
    '
        ActiveCell.FormulaR1C1 = "0"
        Range(Cells(Selection.Row, 1)).Select
        ActiveCell.FormulaR1C1 = "=SUM(RC[17]:RC[19])"
        Range(Cells(Selection.Row, 1)).Select
        Selection.Copy
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range(Cells(Selection.Row, 1)).Select
        Application.CutCopyMode = False
        Range(Cells(Selection.Row, 20)).Select
        ActiveCell.FormulaR1C1 = "=RC[-19]"
        Range(Cells(Selection.Row, 18)).Select
        ActiveCell.FormulaR1C1 = "0"
        Range(Cells(Selection.Row, 19))
        ActiveCell.FormulaR1C1 = "0"
        Range(Cells(Selection.Row, 20)).Select
    End Sub

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

  1. 避免使用.Select.Activate。它会添加操作并减慢代码速度。只需按照范围做你想做的事。

  2. 不使用剪贴板,只需将值直接分配给单元格。

  3. With块有助于减少重复输入的数量。

  4. 现在养成将所有父资料表声明到每个范围对象的习惯。

  5. 使用此:

    Sub Cashflow()
    Dim rng As Range
    Set rng = Selection
    If rng.Count > 1 Then Exit Sub
    rng = 0
    With rng.Parent
        With Cells(rng.Row, 1)
            .FormulaR1C1 = "=SUM(RC[17]:RC[19])"
            .Value = .Value
        End With
        .Cells(rng.Row, 1).FormulaR1C1 = "=RC[-19]"
        .Range(.Cells(rng.Row, 18), .Cells(rng.Row, 19)).Value = 0
    End With
    End Sub