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

Vba 如何使excel宏在活动行的单元格上运行?,vba,excel,Vba,Excel,我在尝试制作宏时遇到问题。我有一个电子表格,我关心a、Q、R、S和T列。首先,我选择Q列中的一行作为宏的初始activecell。我把Q列变成0。然后我把一个求和公式放在a列,对我所在行的R、S和T求和。 然后,我将值复制并粘贴到单元格的列上,使总和成为一个值。我把T列设为A列,然后把0放在R列和S列中 下面是使用record macro创建的初始宏,但它仅适用于我录制宏的行。我希望宏是这样的,当我对任何一行执行Ctrl-g时,它将针对该行运行 Sub Cashflow() ' ' Keyboa

我在尝试制作宏时遇到问题。我有一个电子表格,我关心a、Q、R、S和T列。首先,我选择Q列中的一行作为宏的初始activecell。我把Q列变成0。然后我把一个求和公式放在a列,对我所在行的R、S和T求和。 然后,我将值复制并粘贴到单元格的列上,使总和成为一个值。我把T列设为A列,然后把0放在R列和S列中

下面是使用record macro创建的初始宏,但它仅适用于我录制宏的行。我希望宏是这样的,当我对任何一行执行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
有什么想法吗

  • 避免
    。选择
    。激活
    。它会添加操作并减慢代码速度。你想怎么做就怎么做

  • 不使用剪贴板,只需将值直接指定给单元格即可

  • With
    块有助于减少重复键入的次数

  • 现在养成将所有父图纸声明为每个范围对象的习惯

  • 使用以下命令:

    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
    

    谢谢实际上,我刚刚找到了解决问题的方法,但您的代码要短得多,更简洁。编辑等待实际上上面的代码似乎没有从中间的列中得到正确的和或零,但是无论如何,谢谢!