2016-03-13 104 views
0

我使用Excel工作表來跟蹤我的工作時間。每行代表一個工作日,並具有「日期」,「時間」,「超時」,「總工作時間」和「日薪」。 我希望工作表每次在下個月寫入一個條目時自動創建一個月總結行(即,如果日期爲13/3/16的行後面跟着日期爲2/4/16的行,第二排可以下推,並與夏季的一排(即:每月總工時,每月工資總額)會之間建立在它應該是這個樣子的是: enter image description here在每月月底自動添加月份總結行嗎?

那是可能的,如果?所以,我怎麼辦呢? 謝謝您的意見!

回答

0

你應該把這個代碼表代碼模塊,它爲我像你的組織的數據。

Option Explicit 
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim ThisSheet As Worksheet 
Dim NewRow As Long 
Dim OldTotalRange As Range 
Dim OldTotalRow As Long 

Set ThisSheet = ActiveSheet 
'If not single cell is changed, exit sub 
If Target.Cells.Count = 1 Then 
'Disable events for prevent recursion 
Application.EnableEvents = False 
If Target.Column = 1 And Target.Row <> 1 And Target.value <> "" Then 
    If IsDate(Target.value) And IsDate(Target.Offset(-1, 0).value) Then 
     If Month(Target.value) <> Month(Target.Offset(-1, 0).value) Then 
      With ThisSheet 
       NewRow = Target.Row 
       On Error Resume Next 
        Set OldTotalRange = .Columns(1).Find(What:="Total", After:=Target, SearchDirection:=xlPrevious) 
        OldTotalRow = OldTotalRange.Row 
'It's for first 'Total' when there isn't 'totals' before. 
       If OldTotalRow = 0 Then 
        OldTotalRow = 1 
       End If 
        .Rows(NewRow).Insert 
        .Cells(NewRow, 1) = "Total" 
        .Cells(NewRow, 4).FormulaR1C1 = "=SUM(R[-" & NewRow - OldTotalRow - 1 & "]C:R[-1]C)" 
        .Cells(NewRow, 5).FormulaR1C1 = "=SUM(R[-" & NewRow - OldTotalRow - 1 & "]C:R[-1]C)" 
'It's formatting, you can delete it or change 
        .Range(.Cells(NewRow, 1), .Cells(NewRow, 5)).Interior.Color = RGB(196, 215, 155) 
        .Range(.Cells(NewRow, 1), .Cells(NewRow, 5)).Font.Bold = True 
      End With 
     End If 
    End If 
End If 
Else 
Exit Sub 
End If 
'Enable events 
Application.EnableEvents = True 
End Sub 
+0

如果你稍微解釋一下你的解決方案,你的答案會更有用。 –