2017-10-06 69 views
-1

我遇到了一個我試圖製作的宏的問題。我有一個電子表格,我關心的是列A,Q,R,S和T.首先,我在列Q中選擇一行作爲宏的初始活動單元。我把列Q變成0.然後我在列A中加上一個總和公式,即我所在行的總和R,S和T. 然後,我複製並粘貼列A單元格上的值,以便總和爲值。我使列T =列A.然後我把0放在列R和S.我如何讓excel宏在活動行中的單元格上運行?

下面是使用記錄宏製作的初始宏,但它只適用於我記錄宏的行。我希望宏是這樣的,當我在任何行上執行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。它添加了操作並減慢了代碼。只要做你想要的範圍。

  2. 而不是使用剪貼板直接將值分配給單元格。

  3. With塊有助於減少重複鍵入的數量。

  4. 現在就養成對所有範圍對象聲明所有父表單的習慣。

使用此:

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

謝謝!我其實只是想出瞭如何解決我的問題,但是你的代碼更短,更乾淨。 *編輯*實際上等待上面的代碼似乎沒有得到正確的總和或零中間列,但謝謝反正! – User

相關問題