我制作了一个类模块并命名为Time。我想在其中创建一个函数来创建Time对象的实例并返回它。见下面的代码。如果你能想出一个更好的方法来编写这个函数,我会全神贯注。我遇到的问题是,当我发表以下声明时:
tsheet.MondayStart = Time.Construct(Item.Value)
此调用之前的debug.print语句显示Item.Value为“08:30”。 tsheet的类型为TimeSheet,而且期望为MondayStart属性分配一个Time类型的对象。但是,当此语句在运行时执行时,我得到了对象所需的错误。我甚至尝试删除paranthesis,但所有这一切都会带来另一个错误“编译错误:预期结束语句”
我该如何解决这个问题?请指教。太糟糕的vba不支持construtors的概念: - (
艾伦
'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
答案 0 :(得分:1)
实际上我建议您使用已实现的VBA方法DateValue和TimeValue,它们将接受一个字符串并为您提供所需的内容。
我不确定你需要在这里重新发明轮子。当然我可能错过了什么,所以请让我知道。
答案 1 :(得分:0)
使用新的结果如下:
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