2016-08-04 7 views
0

Я получаю ошибку в приведенном ниже коде.Сейчас() выдает сообщение об ошибке

Dim CurrentTime As Date 
CurrentTime = Format(Now(), "hh:mm AM/PM") 
If CurrentTime = ActiveSheet.Range("I1") Then 
    Call SendEMail 
End If 

Когда время является правильным, то макрос отладки и Now выделен. Может ли кто-нибудь решить эту проблему?

+1

Я думаю, что 'Format' возвращает строку. Можете ли вы попробовать «Dim CurrentTime as String» и посмотреть, что это делает? –

+0

Это работает для меня в Excel 2013. Какова ошибка, которую вы получаете? –

+0

LOL, у Outlook есть эта функция, для случаев, когда вы хотите отправить электронную почту поздно ночью (так что ваш босс считает, что вы работаете круглосуточно) –

ответ

2

Вы не получили фактическую ошибку? Он работает не так, как ожидалось.

Мэтт Клеменс определил вашу проблему, я считаю, вы указали CurrentTime как тип данных даты. Тип данных даты хранит номер , представляющий время/дату, однако вы также просите его хранить информацию о строках (AM/PM), которая не может быть удалена.

Результаты могут содержать значение типа «10: 30 AM», но код Format(Now(), "hh:mm AM/PM"), входящий в переменную Date, приводит к «10: 30: 00», поэтому два никогда не соответствуют строкам. Скопируйте, как предложил Мэтт, и это должно работать (Dim CurrentTime As String).

еще лучше использовать функцию сравнения Дата DateDiff: -

If DateDiff("s",ActiveSheet.Range("I1"),Time()) > 0 then 
    SendEmail 
End If 

Это говорит, если время больше, чем значение в I1 (на второй), а затем запустить SendEmail.

+0

'CurrentTime = Format (Now()," hh: mm AM/PM ")' дает '10:56:00 AM' в Excel 2013, даже когда вы объявляете его как' Date' :) –

+0

Но 'CurrentTime' не в частности, для хранения части AM/PM, которая является форматирующей вещью, она содержит только значение, а затем ваш код/​​среда определяет, как это значение интерпретируется/отображается. –

+1

Правда. Я не говорю, что ваше предложение сравнить время с листом неверно. Я согласен с вами. Я даже фактически проголосовал за вас. Все, что я говорю, когда вы отлаживаете 'Format (Now()," hh: mm AM/PM ")', это даст вам '10:56:00 AM', а не' 10: 30: 00', как указано в Ваше сообщение. –

0

У меня нет среды для тестирования решения прямо сейчас, но из того, что я помню, вам не нужны скобки в 2007 году, а также вам не нужен формат.

Попробуйте следующий код и посмотреть, если это соответствует вашим потребностям:

If час (сейчас) = ActiveSheet.Range ("I1") Тогда

(...)

Конец Если