2017-02-27 46 views
0

我想在添加一行時在列L到R中添加以下公式。到目前爲止,這是我的。當添加一行時添加一個公式vba

但我似乎無法弄清楚如何確保這個宏只發生在添加一行時,並且我不希望它運行到最後一行,而只是添加最新的行。 任何人都可以幫助我。我對VBA還是一個新東西,儘管我四處查看了如何做到這一點,但我無法獲取能夠幫助我在添加行上添加此公式的信息。 感謝您的幫助


Private Sub Worksheet_Change(ByVal Target As Range) 

Dim i As Long 

For i = 2 To LastRow 

     Range("L" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
     Range("M" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
     Range("N" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
     Range("O" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
     Range("P" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
     Range("Q" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
     Range("R" & i).Value = "=NETWORKDAYS(RC[-8],RC[-7],Holidays)" 
Next  
End Sub 

回答

0

有幾種方法可以做到這一點我的頭(也可能是其他人)的頂部。


測試Target範圍,看看其Address是一個完整的行:

​​

測試Target範圍內的列數,看它是否包含了每一個列:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Columns.Count = Me.Columns.Count Then 
     Debug.Print "Entire row changed" 
    End If 
End Sub 

手動跟蹤的最後一行,並與之比較的緩存值:

Private previousBottom As Long '<--Worksheet level variable. 

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim bottom As Long 
    bottom = Me.Cells(Me.Rows.Count, 1).End(xlUp).Row 
    If bottom <> previousBottom Then 
     previousBottom = bottom 
     Debug.Print "Row inserted or deleted." 
    End If 
End Sub 
+0

謝謝,但我嘗試的第一個和最後一個,我後來加入的我的代碼,但沒有任何反應。我錯過了什麼嗎?請注意,我在代碼的末尾添加了Next。 –

+0

@ValS - 當整行被改變時,你想要運行的代碼將進入If塊中 - 只需替換以「Debug.Print」開頭的行。 – Comintern