我正在尝试制作一个宏。我有一个电子表格,我关注的是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
有什么想法吗?
答案 0 :(得分:1)
避免使用.Select
和.Activate
。它会添加操作并减慢代码速度。只需按照范围做你想做的事。
不使用剪贴板,只需将值直接分配给单元格。
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