powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: преобразование даты
22 сообщений из 22, страница 1 из 1
VBA: преобразование даты
    #34256890
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ввод даты производится в формате dd.mm.yyyy.
Как преобразовать дату из этого формата в yyyy-mm-dd при любых региональных настройках ?
Спасибо!
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34256904
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция DatePart используется для определения указанного компонента даты
Аргументыyyyy Год q Квартал m Месяц y День года d День месяца w День недели ww Неделя h Часы n Минуты s Секунды
Код: plaintext
MsgBox "Сейчас " & DatePart("d", Now) & " день месяца"
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34256920
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но если региональные настройки - американские, то:
Код: plaintext
DatePart("d", "12.01.2007")
выдаст 1-е число,
а если региональные настройки - русские, то:
Код: plaintext
DatePart("d", "12.01.2007")
выдаст 12-е число, так ведь?
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34256997
atv_13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Format$(Date, "yyyy\-mm\-dd") пойдет?
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257141
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
atv_13Format$(Date, "yyyy\-mm\-dd") пойдет?
А оно будет работать при любых рег. настройках? Вряд ли...

Интересно, как профи обходят такие углы на VBA? Или вы пишете клиента под определенные рег. настройки?
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257154
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Kutuzov atv_13Format$(Date, "yyyy\-mm\-dd") пойдет?
А оно будет работать при любых рег. настройках? Вряд ли...

Интересно, как профи обходят такие углы на VBA? Или вы пишете клиента под определенные рег. настройки?А профи такой фигней не заморачиваются :)

Когда юзер вводит в ячейку дату, он вводит ее в своем любимом формате. Я предполагаю что его любимый формат совпадает с настройками системы. Иначе юзер не сможет манипулировать ячейкой куда вводит дату, не сможет менять ей формат вывода. В конце-концов, юзер сам должен уметь прочитать введеную им самим дату.
А после того как юзер ввел дату в ячейку, Эксель сам превратит эту дату из текстового формата в числовой. И этой датой можно будет манипулировать как угодно.
Поэтому, объявляешь на листе пару ячеек как "Сделать отчет за период от и до" красишь их как-нибудь выделяешь бордюрчиком или насколько фантазии хватит. А потом в макросе уже делаешь
Код: plaintext
1.
dim date_for_sql as string
date_for_sql = format(activeworksheet.range("Start Date").value, "yyyy-mm-dd")
и все.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257212
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К сожалению, я не совсем профи, так что такой фигней заморачиваюсь.

Если представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной (какой идиот придумал формат mm.dd.yyyy?).

У меня все-таки есть идея, что строковую переменную надо приводить в необходимый вид при помощи строковых функций, а там уж SQL должен понять.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257254
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 должен понять.Можешь. Если есть желание и делать больше нечего, то почему бы и нет?
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257374
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Класс для работы с датами и времени с учетом региональных настроек
с freevbcode.com там еще документация была, но у меня сейчас только сам класс
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257816
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу?

Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил.
Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257848
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Kutuzov White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу?

Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил.
Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы.

кто-то что-то где-то недогоняет (возможно я :))

команда format(now(), "yyyyddmm") возвращает 20071601
и я не думаю, что если у меня будет американская настройка, ответ будет отличатся
смотрите свой код
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34257890
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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() взять строковую переменную в формате, отличном от рег. настроек - не работает.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34258003
Фотография orunbek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HandKot Vadim Kutuzov White Owl Vadim KutuzovЕсли представить, что имеются два клиента с разными рег. настройками - американскими и русскими, то функция Format() вернет разные значения строковой переменной С какого перепугу?

Не знаю, с какого перепугу, но при американских рег. настройках и неамериканском пользователе функция Format(Date_as_dd.mm.yyyy, "yyyy-mm-dd") возвращает dd.mm.yyyy, то есть просто не форматирует данные. Только что проверил.
Я понимаю, что у большинства людей нет проблем с этим, потому что подразумевается, что рег. настройки и формат времени совпадают, но к сожалению, так бывает не всегда: в моем случае вынужденные рег. настройки - американские, а люди вокруг совсем не американцы.

кто-то что-то где-то недогоняет (возможно я :))

команда format(now(), "yyyyddmm") возвращает 20071601
и я не думаю, что если у меня будет американская настройка, ответ будет отличатся
смотрите свой код
согласен
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34258181
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот код для примера:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Private Sub CommandButton1_Click()

Dim date_for_sql As String
Dim date_for_sql1 As String

date_for_sql = Format(Sheet1.Range("A1").Value, "yyyymmdd")
date_for_sql1 = Format(Sheet1.Range("B1").Value, "yyyymmdd")

MsgBox date_for_sql & "     " & date_for_sql1
End Sub

Пример выполнения программы при американских рег. настройках на приложенном рисунке.

orunbek
За класс - спасибо! Попробую попозже разобраться.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34258256
LeonM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А. Поместите на форму календарь и забудьте про форматы
B. Дату в текстовом формате (строку) преобразуйте в Date, а потом форматируйте
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34258308
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonMА. Поместите на форму календарь и забудьте про форматы
B. Дату в текстовом формате (строку) преобразуйте в Date, а потом форматируйте
Посоветуйте, пожалуйста, хороший календарь, в котором можно выбирать язык (хотя бы при программировании).
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34259935
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") возвращает то что нужно на обоих машинах одинаково.

Если сумеешь ответить на мои вопросы (хотя бы на второй), я тебе подскажу как правильно написать макрос :)
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34259953
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim KutuzovПример выполнения программы при американских рег. настройках на приложенном рисунке.У тебя в ячейке B1 не дата а строка.

Формат даты которую вводит юзер ДОЛЖЕН СОВПАДАТЬ с настройками системы.
Не ставь тете Маше американские винды, не ставь дяде Джону русские.
Дата введеная в книгу Экселя на виндах с правильно настроеным форматом даты всегда правильно прочитается после копирования книги на винды с другой региональной настройкой.

Если тебе так сильно хочется поставить тете Маше американские настройки - 1) обучи ее, 2) при помощи функций mid и & преврати введеный текст в то что может обратать функция CDate.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34259957
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)?

Вроде попытался ответить. Спасибо за помощь!
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34259966
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl Vadim KutuzovПример выполнения программы при американских рег. настройках на приложенном рисунке.У тебя в ячейке B1 не дата а строка.

Формат даты которую вводит юзер ДОЛЖЕН СОВПАДАТЬ с настройками системы.
Не ставь тете Маше американские винды, не ставь дяде Джону русские.
Дата введеная в книгу Экселя на виндах с правильно настроеным форматом даты всегда правильно прочитается после копирования книги на винды с другой региональной настройкой.

Если тебе так сильно хочется поставить тете Маше американские настройки - 1) обучи ее, 2) при помощи функций mid и & преврати введеный текст в то что может обратать функция CDate.

Ну вот примерно это я и хотел услышать.
А про тетю Машу и американские винды - тут я не в силах что-то исправить, это требование.
Думал, вдруг есть универсальный способ для извлечения данных.
Спасибо.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34259980
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Kutuzov1. Имеется система, построенная американцами. Для полной работоспособности она должна стоять на Windows с региональными настройками English(USA) . Эта система продана в Прибалтику, где пользователи привыкли вводить данные в формате dd.mm.yyyy, а не mm/dd/yyyy. Экселевский файл с отчетом будет находится на этих же машинах с рег. настройкой Windows - English(USA) .ээээ.... а что в системе? База данных там? Ну поставь систему с базой на американские винды, и пусть пользователи ходят к базе с русских виндов.
В конце концов, можно попинать разработчиков, чтобы они сделали возможность локализации своей супер-системы.


Vadim Kutuzov2. Date_as_dd.mm.yyyy - это переменная String .Не нужно использовать точки в имени переменной.
...
Рейтинг: 0 / 0
VBA: преобразование даты
    #34259987
Фотография Vadim Kutuzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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). В общем, этот пункт никак не изменить :(
А про точки в имени - в коде я точки не пользую, только тут облажался, думал, будет понятней. Спасибо за предупреждение.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA: преобразование даты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]