1

我制作了一个类模块并将其命名为 Time。我想在其中创建一个创建 Time 对象实例并返回它的函数。请参阅下面的代码。如果您能想出更好的方法来编写函数,我会全力以赴。就目前而言,我遇到的问题是当我发表以下声明时:

tsheet.MondayStart = Time.Construct(Item.Value)

此调用之前的 debug.print 语句显示 Item.Value 为“08:30”。tsheet 是 TimeSheet 类型,MondayStart 属性期望分配一个 Time 类型的对象。但是,当此语句在运行时执行时,我得到 object required 错误。我什至尝试删除括号,但所做的只是引发另一个错误“编译错误:预期的语句结束”

我该如何解决?请指教。太糟糕了 vba 不支持构造函数的概念 :-(

艾伦

'IN TIME CLASS MODULE
Public Function Construct(Value As String) As Time
  'This function expects a string formatted like: 08:30
  'Time.Delimiter returns ":"
  Dim tempTime As Time
  Dim vhours As Integer
  Dim vminutes As Integer
  Dim arrTime() As Time

  arrTime = Split(Value, Time.Delimiter)
  hours = CInt(Trim(arrTime(0)))
  minutes = CInt(Trim(arrTime(1)))
  Set tempTime = New Time
  tempTime.hours = vhours
  tempTime.minutes = vminutes

  Construct = tempTime
End Function
4

2 回答 2

1

实际上,我建议您使用已经实现的 VBA 方法 DateValue 和 TimeValue ,它们将接受一个字符串并为您提供所需的内容。

我不确定您是否需要在这里重新发明轮子。当然,我可能错过了一些东西,所以请告诉我。

于 2012-12-13T06:43:38.480 回答
0

使用 new 的结果如下:

Set MonStart = New TimeFrame
Set tsheet.MondayStart = MonStart.Initialize(MonStart, Item.Value)

(为了比较,这里是以前的:

Set MonStart = New TimeFrame
Set tsheet.MondayStart = TimeFrame.Initialize(MonStart, Item.Value)

)

也用于Set函数返回值赋值。

对于第一个代码示例:

...
    Set Construct = tempTime
End Function

对于其他代码示例:

...
    Set Initialize = Value
End Function
于 2012-12-17T00:17:10.073 回答