Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/CDate работает по-разному на разных комп-ах - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » CDate работает по-разному на разных комп-ах (Макросы/Sub)
CDate работает по-разному на разных комп-ах
Naya Дата: Среда, 06.12.2017, 22:43 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый вечер!

Возникла такая проблема: на моём компьютере не работает макрос, т.к. CDate обрабатывает дату некорректно. На двух других комп-ах моих коллег, макрос работает исправно. Возможно дело в настройках компьютера или программы? Как это исправить в макросе

Т.е. макрос берёт с листа Екселя дату в формате ДД.ММ.ГГГГ и сравнивает его с форматом ММ.ДД.ГГГГ (что делает CDate). На другом компьютере CDate берёт дату в формате ДД.ММ.ГГГГ
Грубо говоря, в базе данных, я меняю данные через поиск совпадения условия по дате, но у меня они не совпадают, из-за чего создается новая некорректная запись.

Файл приложить не могу. Макрос большой и вынести его нет возможности. Возможно кто-то сталкивался уже с такой проблемой?

[p.s.]Может как-то ещё можно строку преобразовать в дату (строка ММ.ДД.ГГГГ в дату ДД.ММ.ГГГГ)?[/p.s.]
 
Ответить
СообщениеДобрый вечер!

Возникла такая проблема: на моём компьютере не работает макрос, т.к. CDate обрабатывает дату некорректно. На двух других комп-ах моих коллег, макрос работает исправно. Возможно дело в настройках компьютера или программы? Как это исправить в макросе

Т.е. макрос берёт с листа Екселя дату в формате ДД.ММ.ГГГГ и сравнивает его с форматом ММ.ДД.ГГГГ (что делает CDate). На другом компьютере CDate берёт дату в формате ДД.ММ.ГГГГ
Грубо говоря, в базе данных, я меняю данные через поиск совпадения условия по дате, но у меня они не совпадают, из-за чего создается новая некорректная запись.

Файл приложить не могу. Макрос большой и вынести его нет возможности. Возможно кто-то сталкивался уже с такой проблемой?

[p.s.]Может как-то ещё можно строку преобразовать в дату (строка ММ.ДД.ГГГГ в дату ДД.ММ.ГГГГ)?[/p.s.]

Автор - Naya
Дата добавления - 06.12.2017 в 22:43
Manyasha Дата: Среда, 06.12.2017, 22:56 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2028
Репутация: 843 ±
Замечаний: 0% ±

Excel 2010, 2016
Naya, без файла не совсем понятно.
Оставьте в файле несколько строк с датами и кусок кода, где эти даты сравниваются.


marinamorozova_box@mail.ru
ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеNaya, без файла не совсем понятно.
Оставьте в файле несколько строк с датами и кусок кода, где эти даты сравниваются.

Автор - Manyasha
Дата добавления - 06.12.2017 в 22:56
Hugo Дата: Среда, 06.12.2017, 22:59 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2718
Репутация: 606 ±
Замечаний: 0% ±

Добрый вечер.
Дата есть дата, это по сути число, возможно дробное, если с часами-минутами. Если сравнивать две даты - двусмысленностей быть не должно.
Ну а если сравнивать с строкой - приводите дату к тому же виду что и строка, и сравнивайте как две строки. Или строку приводите в дату, и сравнивайте даты (что кажется и происходит). Как Вы сравниваете эти даты - отсюда не видно.
Без примера проблемы в файле трудно что-то конкретное советовать.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеДобрый вечер.
Дата есть дата, это по сути число, возможно дробное, если с часами-минутами. Если сравнивать две даты - двусмысленностей быть не должно.
Ну а если сравнивать с строкой - приводите дату к тому же виду что и строка, и сравнивайте как две строки. Или строку приводите в дату, и сравнивайте даты (что кажется и происходит). Как Вы сравниваете эти даты - отсюда не видно.
Без примера проблемы в файле трудно что-то конкретное советовать.

Автор - Hugo
Дата добавления - 06.12.2017 в 22:59
_Boroda_ Дата: Среда, 06.12.2017, 23:15 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 11852
Репутация: 4911 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Возможно, у Вас дата записана текстом. Предположим, что она записана так - 01.01.2017. Тогда есть варианты -
1. На компе русский языковой настрой - тогда CDate возьмет ее как дату
2. На компе языковой настрой вероятного противника - тогда CDate не обязательно возьмет ее как дату


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВозможно, у Вас дата записана текстом. Предположим, что она записана так - 01.01.2017. Тогда есть варианты -
1. На компе русский языковой настрой - тогда CDate возьмет ее как дату
2. На компе языковой настрой вероятного противника - тогда CDate не обязательно возьмет ее как дату

Автор - _Boroda_
Дата добавления - 06.12.2017 в 23:15
bmv98rus Дата: Суббота, 09.12.2017, 09:03 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 686
Репутация: 114 ±
Замечаний: 0% ±

Excel 2013/2016
Naya,
Скажу больше, дело даже не в компьютере, а в настройках пользователя и (Немного подправлю _Boroda_,) Не языковых, а именно региональных)
Собственно, если у вас VBА, то скорректировать его и проверив что там у пользователя в ветке реестра
HKEY_CURRENT_USER\Control Panel\International, в вашем случае нас интересует значение sShortDate
и исходя из этого провести конвертацию, не такая большая проблема.
Вариант 2, не смотрим в реестр, а просто сравниваем эталонную дату с тем что после конвертации вышло и в зависимости от результата принимаем решение.
Вариант 3 . Смотрим что у коллег в настройках форматы даты в региональных установках и делаем их аналогичными у себя.
 
Ответить
СообщениеNaya,
Скажу больше, дело даже не в компьютере, а в настройках пользователя и (Немного подправлю _Boroda_,) Не языковых, а именно региональных)
Собственно, если у вас VBА, то скорректировать его и проверив что там у пользователя в ветке реестра
HKEY_CURRENT_USER\Control Panel\International, в вашем случае нас интересует значение sShortDate
и исходя из этого провести конвертацию, не такая большая проблема.
Вариант 2, не смотрим в реестр, а просто сравниваем эталонную дату с тем что после конвертации вышло и в зависимости от результата принимаем решение.
Вариант 3 . Смотрим что у коллег в настройках форматы даты в региональных установках и делаем их аналогичными у себя.

Автор - bmv98rus
Дата добавления - 09.12.2017 в 09:03
Gustav Дата: Суббота, 09.12.2017, 10:52 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1475
Репутация: 559 ±
Замечаний: 0% ±

начинал с Excel 4.0...
Может как-то ещё можно строку преобразовать в дату (строка ММ.ДД.ГГГГ в дату ДД.ММ.ГГГГ)?

Функция CDate чрезмерно интеллектуальна и от этого коварна - она пытается по максимуму превратить компоненты предоставленной строки в корректную дату, что иногда приводит к не совсем ожидаемым результатам:
[vba]
Код
? CDate("12.11.2017")
12.11.2017
? CDate("12.13.2017")
13.12.2017
[/vba]По мне так лучше, чтобы во втором случае возникла ошибка преобразования, а не "13 декабря", если я сам подразумеваю формат ДД.ММ.ГГГГ

Я вообще бы не использовал CDate, а просто сплитил бы строку и расставлял компоненты в нужном мне порядке в функции DateSerial:
[vba]
Код
myDate = Split("12.13.2017", ".")  'ММ.ДД.ГГГГ -> (0)(1)(2)
Debug.Print DateSerial(myDate(2), myDate(0), myDate(1))
[/vba]


Мой tip box - яд 41001663842605
 
Ответить
Сообщение
Может как-то ещё можно строку преобразовать в дату (строка ММ.ДД.ГГГГ в дату ДД.ММ.ГГГГ)?

Функция CDate чрезмерно интеллектуальна и от этого коварна - она пытается по максимуму превратить компоненты предоставленной строки в корректную дату, что иногда приводит к не совсем ожидаемым результатам:
[vba]
Код
? CDate("12.11.2017")
12.11.2017
? CDate("12.13.2017")
13.12.2017
[/vba]По мне так лучше, чтобы во втором случае возникла ошибка преобразования, а не "13 декабря", если я сам подразумеваю формат ДД.ММ.ГГГГ

Я вообще бы не использовал CDate, а просто сплитил бы строку и расставлял компоненты в нужном мне порядке в функции DateSerial:
[vba]
Код
myDate = Split("12.13.2017", ".")  'ММ.ДД.ГГГГ -> (0)(1)(2)
Debug.Print DateSerial(myDate(2), myDate(0), myDate(1))
[/vba]

Автор - Gustav
Дата добавления - 09.12.2017 в 10:52
Мир MS Excel » Вопросы и решения » Вопросы по VBA » CDate работает по-разному на разных комп-ах (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2017 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!