2012-12-13 31 views
1

我创建了一个Class Module并将其命名为Time。我想在其中创建一个Time对象的实例并将其返回。见下面的代码。如果你能想出一个更好的方法来编写这个函数,那么我就是耳朵。我有,因为它代表的问题是,当我作出以下声明:函数调用时需要的对象错误

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

这一呼吁之前,Debug.Print语句显示Item.Value是“08:30”。 tsheet是TimeSheet类型的,MondayStart属性期望被分配一个Time类型的对象。但是,当这个语句在运行时执行时,我得到了对象所需的错误。我甚至尝试删除pativehesis,但所有这些都会引发另一个错误“编译错误:预期的声明结束”

如何解决此问题?请指教。太糟糕了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 
+1

我认为一个SET在tsheet.MondayStart = Time.Construct(Item.Value)丢失? – Larry

+0

我试着添加SET,但在运行时我仍然得到“需要的对象”。当我逐行浏览时:Set tsheet.MondayStart = Time.Construct(Item.Value),Item.Value在返回参数“08:30”后立即返回错误。我认为它对我的Construct()函数有些不利,但我不知道那会是什么?请指教。 – Alan

+0

时间是VBA中的一个关键字,您能否尝试将时间更改为其他变量名称? – Larry

回答

1

其实我建议你使用已经实现的VBA方法则DateValue和TIMEVALUE将接受一个字符串,并给你你需要什么。

我不知道你需要在这里重新发明轮子当然,我可能错过了一些东西,所以请让我知道

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 
+0

好的......我试过了。我仍然得到错误。这是困难的一个!功能似乎足够向前。我们显然缺少其他东西?如果你有整个课程模块来看,它会有帮助吗? – Alan

+0

好的,我已经编辑了上面的内容来添加另一个修复程序。 –

+0

如果这得到了进一步的发现,那么它就是使用模块本身作为VBA不喜欢的对象(尽管它应该在编译时抱怨,如果你问我的意见,应该抱怨)。如果这样做,你也不需要传递'MonStart'作为参数(你可以返回'Me')。 –

相关问题