#excel #vba #macos #date #overflow
#преуспеть #vba #macos #Дата #переполнение
Вопрос:
У меня есть два простых модуля VBA. Один работает нормально (WorksOK). Один из них выдает ошибку переполнения (DoesntWork). Разница между ними заключается в том, что WorksOK вызывает MsgBox. Оба вычисляют дату 2 января 2021 года, добавляя единицу к CDate(«1 января 2021 года»). Может кто-нибудь, пожалуйста, объяснить, почему WorksOK работает нормально, а DoesntWork не работает?
Я наблюдаю такое поведение только в:
- Excel Mac Catalina 16.44 VBA 7.1
- Word Mac Catalina 16.44 VBA 7.1.
Excel VBA в Windows, кажется, в порядке.
Sub WorksOK()
Dim j As Integer, y As Date
j = 1
y = CDate("January 1, 2021") j
Debug.Print y
MsgBox y
Debug.Print CDate("January 1, 2021") j
End Sub
Sub DoesntWork()
Dim j As Integer, y As Date
j = 1
y = CDate("January 1, 2021") j
Debug.Print y
Debug.Print CDate("January 1, 2021") j 'Overflow
End Sub
Комментарии:
1. Что происходит с
Dim j As Long
?2. Дата 1/1/2021 преобразуется в число 44 197.
Integer
максимальное значение составляет 32 767, поэтому вы получаете ошибку переполнения.3. Поведение такое же, независимо от того, является ли j длинным или целым числом
4. Даррелл Х: Хорошо, предположим, что проблема в размере даты. Тогда почему VBA не жалуется в версии Windows? И почему MsgBox имеет значение?
5. Да, кажется, Excel в Windows преобразуется правильно. Код выполняется на моем компьютере с Windows.
Ответ №1:
Не могу сказать, но всегда обрабатывайте даты как даты, а не строки, а не числа, без исключений.
Это выполняется:
Sub DoesntWork()
Dim j As Integer, y As Date
j = 1
y = DateAdd("d", j, #1/1/2021#)
Debug.Print y
Debug.Print DateAdd("d", j, #1/1/2021#)
End Sub
Комментарии:
1. Хммм. Вы проверили это на Mac? Когда я это сделал, я получил такое же поведение (ovflo в последнем операторе)
2. Нет, у меня нет Mac, но происходит что-то еще; добавление одного дня к дате, предшествующей 9999-12-31, никак не может привести к переполнению. Вы даже можете
Dim j As Byte
, и это все равно будет работать.3. Да, это головоломка. Если вы думаете о проведении экспериментов, дайте мне знать, и я попробую их на Mac.