2012-12-13 2 views
1

Я создал модуль класса и назвал его Time. Я хотел иметь в нем функцию, которая создала экземпляр объекта Time и вернула его. См. Код ниже. Если вы можете придумать лучший способ написать функцию, я все уши. Проблема у меня, как он стоит, когда я делаю следующее заявление:объект требуется ошибка при вызове функции

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

Debug.Print заявление до этого вызова показывает, что Item.Value является «8:30». tsheet имеет тип TimeSheet и свойство MondayStart ожидает, что ему будет присвоен объект типа Time. Однако, когда этот оператор выполняется во время выполнения, я получаю требуемую ошибку. Я даже попытался удалить парантез, но все, что делает, вызывает еще одну ошибку «Ошибка компиляции: ожидаемый конец отчета»

Как это исправить? Пожалуйста, порекомендуйте. Жаль, что 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) 

(Для Comparision, вот предыдущая:

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»). –

Смежные вопросы