|
|
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Ввод даты производится в формате dd.mm.yyyy. Как преобразовать дату из этого формата в yyyy-mm-dd при любых региональных настройках ? Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 18:51 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Функция DatePart используется для определения указанного компонента даты Аргументыyyyy Год q Квартал m Месяц y День года d День месяца w День недели ww Неделя h Часы n Минуты s Секунды Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 18:58 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Но если региональные настройки - американские, то: Код: plaintext а если региональные настройки - русские, то: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 19:05 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Format$(Date, "yyyy\-mm\-dd") пойдет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 19:57 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
atv_13Format$(Date, "yyyy\-mm\-dd") пойдет? А оно будет работать при любых рег. настройках? Вряд ли... Интересно, как профи обходят такие углы на VBA? Или вы пишете клиента под определенные рег. настройки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 21:54 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Vadim Kutuzov atv_13Format$(Date, "yyyy\-mm\-dd") пойдет? А оно будет работать при любых рег. настройках? Вряд ли... Интересно, как профи обходят такие углы на VBA? Или вы пишете клиента под определенные рег. настройки?А профи такой фигней не заморачиваются :) Когда юзер вводит в ячейку дату, он вводит ее в своем любимом формате. Я предполагаю что его любимый формат совпадает с настройками системы. Иначе юзер не сможет манипулировать ячейкой куда вводит дату, не сможет менять ей формат вывода. В конце-концов, юзер сам должен уметь прочитать введеную им самим дату. А после того как юзер ввел дату в ячейку, Эксель сам превратит эту дату из текстового формата в числовой. И этой датой можно будет манипулировать как угодно. Поэтому, объявляешь на листе пару ячеек как "Сделать отчет за период от и до" красишь их как-нибудь выделяешь бордюрчиком или насколько фантазии хватит. А потом в макросе уже делаешь Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 22:13 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
К сожалению, я не совсем профи, так что такой фигней заморачиваюсь. Если представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной (какой идиот придумал формат mm.dd.yyyy?). У меня все-таки есть идея, что строковую переменную надо приводить в необходимый вид при помощи строковых функций, а там уж SQL должен понять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2007, 23:35 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу? Читаем документацию: Format FunctionReturns a Variant (String) containing an expression formatted according to instructions contained in a format expression. Syntax Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) The Format function syntax has these parts: Part Description expression Required. Any valid expression. format Optional. A valid named or user-defined format expression. firstdayofweek Optional. A constant that specifies the first day of the week. firstweekofyear Optional. A constant that specifies the first week of the year. .... И очень внимательно читаем описание второго параметра. Vadim Kutuzov(какой идиот придумал формат mm.dd.yyyy?).Ну имя этого человека я назвать не смогу, но то что он был англичанином это точно. Vadim KutuzovУ меня все-таки есть идея, что строковую переменную надо приводить в необходимый вид при помощи строковых функций, а там уж SQL должен понять.Можешь. Если есть желание и делать больше нечего, то почему бы и нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 01:13 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Класс для работы с датами и времени с учетом региональных настроек с freevbcode.com там еще документация была, но у меня сейчас только сам класс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 07:57 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу? Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил. Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 10:50 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Vadim Kutuzov White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу? Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил. Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы. кто-то что-то где-то недогоняет (возможно я :)) команда format(now(), "yyyyddmm") возвращает 20071601 и я не думаю, что если у меня будет американская настройка, ответ будет отличатся смотрите свой код ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 11:00 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
HandKot Vadim Kutuzov White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу? Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил. Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы. кто-то что-то где-то недогоняет (возможно я :)) команда format(now(), "yyyyddmm") возвращает 20071601 и я не думаю, что если у меня будет американская настройка, ответ будет отличатся смотрите свой код Все правильно! Ты берешь Now(), который автоматически идет в понятном формате для данных рег. настроек (любых). Но если вместо Now() взять строковую переменную в формате, отличном от рег. настроек - не работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 11:10 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
HandKot Vadim Kutuzov White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу? Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил. Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы. кто-то что-то где-то недогоняет (возможно я :)) команда format(now(), "yyyyddmm") возвращает 20071601 и я не думаю, что если у меня будет американская настройка, ответ будет отличатся смотрите свой код согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 11:26 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Вот код для примера: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Пример выполнения программы при американских рег. настройках на приложенном рисунке. orunbek За класс - спасибо! Попробую попозже разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 12:09 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
А. Поместите на форму календарь и забудьте про форматы B. Дату в текстовом формате (строку) преобразуйте в Date, а потом форматируйте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 12:25 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
LeonMА. Поместите на форму календарь и забудьте про форматы B. Дату в текстовом формате (строку) преобразуйте в Date, а потом форматируйте Посоветуйте, пожалуйста, хороший календарь, в котором можно выбирать язык (хотя бы при программировании). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 12:35 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Vadim KutuzovНе знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил. У меня три вопроса: 1) Каким образом ты определил несовпадение пользователя с региональными настройками? У тебя на пользователе написано что он неамериканский? 2) Что это за переменная такая Date_as_dd.mm.yyyy ???? Объект пользовательского класса Date_as_dd в котором лежит объект другого пользовательского класса mm в котором лежит перменная yyyy? 3) Почему у меня на натуральном американском Экселе, идеально работает книга сделаная на руссифированой машине с руссифицированным Экселем? Простой Format(somedate, "yyyy-mm-dd") возвращает то что нужно на обоих машинах одинаково. Если сумеешь ответить на мои вопросы (хотя бы на второй), я тебе подскажу как правильно написать макрос :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 19:50 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Vadim KutuzovПример выполнения программы при американских рег. настройках на приложенном рисунке.У тебя в ячейке B1 не дата а строка. Формат даты которую вводит юзер ДОЛЖЕН СОВПАДАТЬ с настройками системы. Не ставь тете Маше американские винды, не ставь дяде Джону русские. Дата введеная в книгу Экселя на виндах с правильно настроеным форматом даты всегда правильно прочитается после копирования книги на винды с другой региональной настройкой. Если тебе так сильно хочется поставить тете Маше американские настройки - 1) обучи ее, 2) при помощи функций mid и & преврати введеный текст в то что может обратать функция CDate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 20:04 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
White Owl Vadim KutuzovНе знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил. У меня три вопроса: 1) Каким образом ты определил несовпадение пользователя с региональными настройками? У тебя на пользователе написано что он неамериканский? 2) Что это за переменная такая Date_as_dd.mm.yyyy ???? Объект пользовательского класса Date_as_dd в котором лежит объект другого пользовательского класса mm в котором лежит перменная yyyy? 3) Почему у меня на натуральном американском Экселе, идеально работает книга сделаная на руссифированой машине с руссифицированным Экселем? Простой Format(somedate, "yyyy-mm-dd") возвращает то что нужно на обоих машинах одинаково. Если сумеешь ответить на мои вопросы (хотя бы на второй), я тебе подскажу как правильно написать макрос :) Ну... 1. Имеется система, построенная американцами. Для полной работоспособности она должна стоять на Windows с региональными настройками English(USA) . Эта система продана в Прибалтику, где пользователи привыкли вводить данные в формате dd.mm.yyyy, а не mm/dd/yyyy. Экселевский файл с отчетом будет находится на этих же машинах с рег. настройкой Windows - English(USA) . 2. Date_as_dd.mm.yyyy - это переменная String . Просто я написал её таким образом, чтобы было понятно, что пользователь будет вводить дату как dd.mm.yyyy , а получилось, что просто запутал народ. Никаких классов нет . 3. Я не знаю, почему у тебя так, но мне хотелось бы узнать: у тебя региональные настройки Windows(!) в обоих случаях одинаковые или нет? Что значит "на натуральном американском Экселе" - это обыкновенный Excel из Office 200x English или это у тебя рег. настройки Windows - English(USA)? Вроде попытался ответить. Спасибо за помощь! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 20:07 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
White Owl Vadim KutuzovПример выполнения программы при американских рег. настройках на приложенном рисунке.У тебя в ячейке B1 не дата а строка. Формат даты которую вводит юзер ДОЛЖЕН СОВПАДАТЬ с настройками системы. Не ставь тете Маше американские винды, не ставь дяде Джону русские. Дата введеная в книгу Экселя на виндах с правильно настроеным форматом даты всегда правильно прочитается после копирования книги на винды с другой региональной настройкой. Если тебе так сильно хочется поставить тете Маше американские настройки - 1) обучи ее, 2) при помощи функций mid и & преврати введеный текст в то что может обратать функция CDate. Ну вот примерно это я и хотел услышать. А про тетю Машу и американские винды - тут я не в силах что-то исправить, это требование. Думал, вдруг есть универсальный способ для извлечения данных. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 20:11 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
Vadim Kutuzov1. Имеется система, построенная американцами. Для полной работоспособности она должна стоять на Windows с региональными настройками English(USA) . Эта система продана в Прибалтику, где пользователи привыкли вводить данные в формате dd.mm.yyyy, а не mm/dd/yyyy. Экселевский файл с отчетом будет находится на этих же машинах с рег. настройкой Windows - English(USA) .ээээ.... а что в системе? База данных там? Ну поставь систему с базой на американские винды, и пусть пользователи ходят к базе с русских виндов. В конце концов, можно попинать разработчиков, чтобы они сделали возможность локализации своей супер-системы. Vadim Kutuzov2. Date_as_dd.mm.yyyy - это переменная String .Не нужно использовать точки в имени переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 20:20 |
|
||
|
VBA: преобразование даты
|
|||
|---|---|---|---|
|
#18+
White Owl Vadim Kutuzov1. Имеется система, построенная американцами. Для полной работоспособности она должна стоять на Windows с региональными настройками English(USA) . Эта система продана в Прибалтику, где пользователи привыкли вводить данные в формате dd.mm.yyyy, а не mm/dd/yyyy. Экселевский файл с отчетом будет находится на этих же машинах с рег. настройкой Windows - English(USA) .ээээ.... а что в системе? База данных там? Ну поставь систему с базой на американские винды, и пусть пользователи ходят к базе с русских виндов. В конце концов, можно попинать разработчиков, чтобы они сделали возможность локализации своей супер-системы. Vadim Kutuzov2. Date_as_dd.mm.yyyy - это переменная String .Не нужно использовать точки в имени переменной. В системе там много всего: и БД, и система управления производством, и еще много чего. И компутер не один, а несколько, но все с English(USA). В общем, этот пункт никак не изменить :( А про точки в имени - в коде я точки не пользую, только тут облажался, думал, будет понятней. Спасибо за предупреждение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 20:28 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=251&tid=2164689]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
3ms |
| others: | 201ms |
| total: | 349ms |

| 0 / 0 |
