类未检测到作为日期的成员

时间:2019-10-22 10:27:37

标签: excel vba

我正在尝试建立一个文件来比较每个工人的工作时间与他们的计划时间。

我已经建立了一些类来实现这一目标,但是在给字典类提供时间作为键时遇到了问题。

在这里您可以看到我已经有一个密钥#2:30:00#(项目4),并且我正在提供密钥#2:30:00#,但是代码希望将其添加为新密钥:

Add key

添加后:

Key added

现在我有2个具有相同值的项目(项目4和项目17)。

这是该课程的代码:

Option Explicit
Private m_Tramo As Object
Property Get Tramos(ByVal Key As Date) As Tramos
    With m_Tramo
        If Not .Exists(Key) Then .Add Key, New Tramos
    End With
    Set Tramos = m_Tramo(Key)
End Property
Private Sub Class_Initialize()
    Set m_Tramo = CreateObject("Scripting.Dictionary")
End Sub
Private Sub Class_Terminate()
    Set m_Tramo = Nothing
End Sub
Public Property Get Keys() As Variant
    Keys = m_Tramo.Keys
End Property
Public Property Get Count() As Long
    Count = m_Tramo.Count
End Property

还有更多,但是在这里没关系。

现在,代码首次添加密钥:

Sub CalculaTramosProgramados(arr As Variant, Agentes As Buca, Horario As String, AgenteHoy As Dias)

    Dim HoraI As Date
    HoraI = Left(Horario, 5)

    Dim HoraF As Date
    HoraF = Right(Horario, 5)
    If HoraF < HoraI Then HoraF = HoraF + 1

    Dim TramoInicial As Date
    If Minute(HoraI) < 30 Then
        TramoInicial = TimeSerial(Hour(HoraI), 0, 0)
    Else
        TramoInicial = TimeSerial(Hour(HoraI), 30, 0)
    End If

    'Vamos a rellenar con 30 minutos todos los tramos
    Dim i As Long
    Dim TramoActual As Date
    For i = 0 To Application.RoundUp(DateDiff("n", HoraI, HoraF) / 30, 0) - 1
        TramoActual = TramoInicial + TimeSerial(0, 30 * i, 0)
        AgenteHoy.Tramos(TramoActual).Programado = 30
    Next i

    'Primer tramo no completo
    If Minute(HoraI) <> 0 Or Minute(HoraI) <> 30 Then
        If Minute(HoraI) < 30 Then
            AgenteHoy.Tramos(TimeSerial(Hour(HoraI), 0, 0)).Programado = 30 - Minute(HoraI)
        Else
            AgenteHoy.Tramos(TimeSerial(Hour(HoraI), 30, 0)).Programado = 60 - Minute(HoraI)
        End If
    End If

    'último tramo no completo
    If Minute(HoraF) <> 0 Or Minute(HoraF) <> 30 Then
        If Minute(HoraF) < 30 Then
            AgenteHoy.Tramos(TimeSerial(Hour(HoraF), 0, 0)).Programado = Minute(HoraF)
        Else
            AgenteHoy.Tramos(TimeSerial(Hour(HoraF), 30, 0)).Programado = Abs(30 - Minute(HoraF))
        End If
    End If

End Sub

参数是一个充满数据的数组,一个主类的初始化实例(包含该类),该类的父类的计划和快捷方式引用(以清除一些代码)。

此过程可以很好地填充所有内容,但是当我回到这里时,代码将尝试添加已经存在的新时间。

Sub CargarReales(arr As Variant, Agentes As Buca)

    Dim i As Long
    Dim Login As String
    Dim Centro As String
    Dim Dia As Date, Tramo As Date
    Dim CargarTramo As Boolean
    Dim AgenteHoy As Dias
    For i = 2 To UBound(arr)
        Dia = arr(i, 1)
        Centro = arr(i, 2)
        CargarTramo = compruebaTramo(Dia, Centro)
        If Not CargarTramo Then GoTo Siguiente
        Login = arr(i, 4)
        Tramo = Mid(arr(i, 3), 4, 8)
        Set AgenteHoy = Agentes.Logins(Login).Dias(Dia)
        AgenteHoy.Tramos(Tramo).Real = arr(i, 5) / 60
Siguiente:
    Next i

End Sub

同样,参数是一个充满数据和主类的数组。

我确保代码提供给类的所有内容都是正确的变量类型,在这种情况下,Date个变量仅保留时间,而不保留日期。

关于VBA为什么这样做的任何线索吗?

0 个答案:

没有答案