2016-08-01 27 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 –