2016-08-01 25 views
0

我正在Excel的這個時間表上工作,這會讓我知道如果在特定的班次中只安排一個人。那麼宏是如何通過我附加的特定列表來檢查它們的開始時間和結束時間。如果我在某個特定時間安排某人,如果其他人會重疊,我希望宏讓我知道。以下代碼正在工作,但現在我正在測試以查看它是否有效,我將一個名稱,它們將運行的應用程序服務器,開始時間和結束時間。所以這個宏經過一個循環來檢查我在excel上提供的表,但是我得到了一個錯誤。例如,如果我將開始時間設置爲上午6點,結束時間設置爲上午6點30分,並且在桌面上提供,我還有其他人在行撻時間在5:59上午對rowendtime = 6:35上午運行該應用程序它應該讓我看到一個「衝突」,因爲它們是重疊的,但由於某種原因,它顯示出「沒有衝突」。任何幫助都會得到真正的讚賞。下面是代碼:我該如何安排時間表vba的時間表

Public Sub LoopRows(Appserver As String, StartTime As Date, EndTime As Date) 

    Dim x As Integer 
    Dim NumROws As Integer 
    NumROws = Range("Sheet3!C5").End(xlDown).Row - Range("Sheet3!C5").Row 
    Worksheets("Sheet3").Activate 
    Range("Sheet3!C5").Select 
    msgbox Appserver 
    msgbox StartTime 
    msgbox EndTime 
    For x = 1 To NumROws 
    ActiveCell.Offset(1, 0).Select 
    If (ActiveCell.Offset(0, 1).Value = Appserver) Then 
     Dim RowStartTime As Date 
     Dim RowEndTime As Date 
     msgbox ActiveCell.Offset(0, 1).Value 
     msgbox RowStartTime = Val(ActiveCell.Offset(0, 3).Value) 
     msgbox RowEndTime = Val(ActiveCell.Offset(0, 4).Value) 
     If (((EndTime > RowStartTime) And (EndTime < RowEndTime)) Or (((StartTime > RowStartTime) And (StartTime < RowEndTime))) Or (((StartTime < RowStartTime) And (EndTime > RowEndTime)))) Then 
      msgbox "Conflict" 
     Else 
      msgbox "noConflict" 
     End If 
    End If 
    Next 
End Sub 
+0

感謝您的編輯@comintern –

回答

0

簡化您的If條件。這是不可能的兩個時間跨度沒有其他跨度的起點和終點之間的一個出發時間下降到重疊:

部分重疊的情況下:

Start1      End1 
    |----------------------------| 
       Start2     End2 
       |---------------------| 

完全重疊的情況:

Start1      End1 
    |----------------------------| 
     Start2   End2 
     |----------------| 

可以使If條件:

If (StartTime > RowStartTime) And (StartTime < RowEndTime) Or _ 
    (RowStartTime > StartTime) And (RowStartTime < EndTime) Then 

編輯:它應該看起來更像下面的代碼。請注意,我從原始代碼假定「Appserver」值在列「F」中,開始時間在列「H」中,結束時間在列「I」中。在CDate電話上也沒有檢查錯誤(但是再次也沒有在Val電話上)。

Public Sub LoopRows(Appserver As String, StartTime As Date, EndTime As Date) 
    Dim CurrentRow As Integer, LastRow As Integer 
    Dim RowStartTime As Date, RowEndTime As Date 
    With Worksheets("Sheet3") 
     LastRow = .Range("C" & .Rows.Count).End(xlUp).Row 
     For CurrentRow = 6 To LastRow 
      If (.Cells(CurrentRow, 6).Value = Appserver) Then 
       RowStartTime = CDate(.Cells(CurrentRow, 8).Value) 
       RowEndTime = CDate(.Cells(CurrentRow, 9).Value) 
       If (StartTime > RowStartTime) And (StartTime < RowEndTime) Or _ 
        (RowStartTime > StartTime) And (RowStartTime < EndTime) Then 
        MsgBox "Conflict" 
       Else 
        MsgBox "noConflict" 
       End If 
      End If 
     Next 
    End With 
End Sub 
+0

您好,感謝您的回覆。我將我的代碼切換到了你的代碼,而且我也遇到了同樣的問題,而且我沒有工作。我輸入4點到4點15分的時間,在Excel表格上保存的時間是4點到4點05分,並且沒有衝突。你認爲這是因爲我沒有在代碼中聲明它們不能相等的聲明嗎? @comintern –

+0

我假設你把'MsgBox'調用從你的任務中刪除? – Comintern

+0

我只是把它們關閉了,現在我在這行代碼中收到了一個錯誤:ActiveCell.Offset(0,1)。它說值是一個無效的屬性使用。 @Comintern –