2014-10-20 71 views
2

我已經創建了一個子部分,用於檢查列F中是否發生了更改,並將時間戳記寫入列G中的相應單元格。我如何通過查找H列中的時間戳和包含一週開始日期A1的單元格之間的差異來編輯此子網以返回列H中的網絡天數?沒有VBA,公式是=ABS(NETWORKDAYS(A1, B1) - SIGN(NETWORKDAYS(A1, H1))。以下是我的代碼到目前爲止。任何幫助?使用NETWORKDAYS的Excel VBA

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim r As Range, c As Range 
    Application.EnableEvents = False 
    With Target 
    'check if change happened in column F 
    If .Column = 6 Then 
     'check if changed value is X 
     If Not IsEmpty(c) Then 
     'add datestamp if it is 
     Cells(.Row, 7).Value = Format(DateTime.Now, "yyyy-MM-dd hh:mm:ss") 
     Cells(.Row, 8).Value = ABS(NETWORKDAYS(G5,H2)-SIGN(NETWORKDAYS(G5,H2) 
     Else 
     'clear datestamp and Column H if not 
     Cells(.Row, 7).Value = "" 
     Cells(.Row, 8).Value = "" 
     End If 
    End If 
    End With 
    Application.EnableEvents = True 
End Sub 

'

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim r As Range, c As Range 
    Dim d1 As Date, d2 As Date, wf As WorksheetFunction 
    Dim N As Long 

    Set wf = Application.WorksheetFunction 
    Application.EnableEvents = False 
    With Target 
    'check if change happened in column F 
    If .Column = 2 Then 
     'check if changed value is X 
     If Not IsEmpty(c) Then 
     'add datestamp if it is 
     d1 = Cells.Range("A1") 
     d2 = Cells.Range("B1:B2") 
     N = wf.NetworkDays(d1, d2) 
     Cells(.Row, 4).Value = N 

     Else 
     'clear datestamp and Colunm H if not 
     Cells(.Row, 4).Value = "" 
     End If 
    End If 
    End With 
    Application.EnableEvents = True 
End Sub 
+2

你在做什麼?您的源代碼在NETWORKDAYS行中沒有匹配的右括號。 – ariscris 2014-10-20 13:28:12

+0

datestamp按預期工作,但網絡時間部分不是 – WKI 2014-10-20 14:20:42

+0

我編輯了縮進,除了應檢查的額外'End Sub'外。你不可能在屏幕上看到兩個'Sub'和'End Sub'。 – hynekcer 2014-10-20 18:41:53

回答

1

下面是如何使用NETWORKDAYS()VBA

Sub dural() 
    Dim d1 As Date, d2 As Date, wf As WorksheetFunction 
    Dim N As Long 
    Set wf = Application.WorksheetFunction 
    d1 = DateValue("1/1/2014") 
    d2 = DateValue("12/31/2014") 
    N = wf.NetworkDays(d1, d2) 
    MsgBox N 
End Sub 
0

一次我清理您的缺口,很明顯,你有一個「 End Sub「,在」Worksheet_Change「子文件中的」If「語句的中間。格式可以幫助你理解這種事情。