Vba 对象没有';自定义类上不支持此属性或方法错误

Vba 对象没有';自定义类上不支持此属性或方法错误,vba,outlook,Vba,Outlook,我在这个问题上仍有困难。我正在使用自定义类模块:时间表和时间表。以下是简短版本: _________________________ 'TIMEFRAME CLASS MODULE 'This class records Military Time, but allows 'you to also display it in Civilian Time Private pHours As Integer Private pMinutes As Integer Private pTotalMinu

我在这个问题上仍有困难。我正在使用自定义类模块:时间表和时间表。以下是简短版本:

_________________________
'TIMEFRAME CLASS MODULE
'This class records Military Time, but allows
'you to also display it in Civilian Time
Private pHours As Integer
Private pMinutes As Integer
Private pTotalMinutes As Integer

Public Property Get hours() As Integer
  hours = pHours
End Property
Public Property Let hours(Value As Integer)
  If Value >= 1 And Value <= 24 Then
     pHours = Value
  Else
     Err.Raise 9009, , "Hours Value [" & CStr(Value) & "] is not valid."
  End If
End Property
Public Property Get minutes() As Integer
  minutes = pMinutes
End Property
Public Property Let minutes(Value As Integer)
  If Value >= 0 And Value <= 59 Then
    pMinutes = Value
  Else
    Err.Raise 9010, , "Minutes Value [" & CStr(Value) & "] is not valid."
  End If
End Property

Public Property Let Initialize(str As String)
  'This property expects a string formatted like: 08:30
  Dim vhours As String
  Dim vminutes As String
  Dim arrTime() As String

  If InStr(str, Me.Delimiter) Then
    arrTime = Split(str, Me.Delimiter)
    vhours = Trim(arrTime(0))
    vminutes = Trim(arrTime(1))
    If IsNumeric(vhours) Then
       pHours = CInt(vhours)
    End If
    If IsNumeric(vminutes) Then
       pMinutes = CInt(vminutes)
    End If
  Else
    'Set to defaults
    pHours = 0
    pMinutes = 0
  End If
End Property
...

_____________________________
'TIMESHEET CLASS MODULE
Private pEmployeeID As Integer
Private pStartDate As Date
Private pEndDate As Date
Private pMonStart As TimeFrame
Private pMonEnd As TimeFrame
Private pMonBreak As Double
Private pTuesStart As TimeFrame
Private pTuesEnd As TimeFrame
Private pTuesBreak As Double
Private pWedStart As TimeFrame
Private pWedEnd As TimeFrame
Private pWedBreak As Double
Private pThursStart As TimeFrame
Private pThursEnd As TimeFrame
Private pThursBreak As Double
Private pFriStart As TimeFrame
Private pFriEnd As TimeFrame
Private pFriBreak As Double
Public Property Get EmployeeID() As Integer
    EmployeeID = pEmployeeID
End Property
Public Property Let EmployeeID(Value As Integer)
    If Value > 0 Then
           pEmployeeID = Value
    Else
         MsgBox "Employee ID " & Value & " is an incorrect value." & vbCrLf & "Employee ID must be a positive integer"
    End If

End Property
Public Property Get StartDate() As Date
  StartDate = pStartDate
End Property
Public Property Let StartDate(Value As Date)
  pStartDate = Value
End Property
Public Property Get EndDate() As Date
  EndDate = pEndDate
End Property
Public Property Let EndDate(Value As Date)
  pEndDate = Value
End Property
Public Property Get MondayStart() As TimeFrame
  Set MondayStart = pMonStart
End Property
Public Property Set MondayStart(ByRef Value As TimeFrame)
  Set pMonStart = Value
End Property
Public Property Get MondayEnd() As TimeFrame
  Set MondayEnd = pMonStart
End Property
Public Property Set MondayEnd(ByRef Value As TimeFrame)
  Set pMonEnd = Value
End Property
Public Property Get MondayBreak() As Double
  MondayBreak = pMonBreak
End Property
Public Property Let MondayBreak(Value As Double)
  pMonBreak = Value
End Property
Public Property Get TuesdayStart() As TimeFrame
  Set TuesdayStart = pTuesStart
End Property
Public Property Set TuesdayStart(ByRef Value As TimeFrame)
  Set pTuesStart = Value
End Property
Public Property Get TuesdayEnd() As TimeFrame
   Set TuesdayEnd = pTuesStart
End Property
Public Property Set TuesdayEnd(ByRef Value As TimeFrame)
   Set pTuesEnd = Value
End Property
Public Property Get TuesdayBreak() As Double
  TuesdayBreak = pTuesBreak
End Property
Public Property Let TuesdayBreak(Value As Double)
  pTuesBreak = Value
End Property
...
根据我的研究,语法似乎正确,当我在项目后键入点运算符“.”时,我的列表将显示所有属性。我又不是把什么东西错丢了。请告知


Alan

调试。打印在对象上不起作用。您需要在返回标准数据类型的属性或方法上使用它。否则,您将始终得到错误“对象不支持此属性或方法”

例如,您需要类似于
TimeFrame.Value
TimeFrame.MilitaryValue

可能的实施方式:

Public Property Get Value() As String
    'Returns TimeFrame TimeStamp as standard time
     Value = CDate(pHours & ":" & pMinutes)
End Property

Public Property Get MilitaryValue() as String
     'Returns TimeFrame TimeStamp as Military Time
     MilitaryValue = Format(CDate(pHours & ":" & pMinutes),"hh:nn")
End Property
根据您对时间框架的实现,它似乎是一个时间戳和一个持续时间。在这种情况下,使用标准的
Date
数据类型可能更有意义。日期数据类型精确到秒,您可以使用小时和分钟功能提取特定的小时和分钟信息。前任:
小时(时间戳)
分钟(时间戳)


然后,您可以使用一个简单的
debug.print
来显示时间,该时间默认为标准时间,但可以使用
Format
作为军事时间,如我的
MilitaryValue
示例所示。

为什么您希望能够打印出
时间段
,它不是标准数据类型。您需要处理
时间范围
对象并返回可以打印的标准类型。Alan,我建议您阅读常见问题解答,特别是关于提问的部分:。
Public Property Get MondayStart() As TimeFrame
  Set MondayStart = pMonStart
End Property
Public Property Get Value() As String
    'Returns TimeFrame TimeStamp as standard time
     Value = CDate(pHours & ":" & pMinutes)
End Property

Public Property Get MilitaryValue() as String
     'Returns TimeFrame TimeStamp as Military Time
     MilitaryValue = Format(CDate(pHours & ":" & pMinutes),"hh:nn")
End Property