Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 11.01.2010, 09:33   #1
antfrolov
Пользователь
 
Регистрация: 05.04.2008
Сообщений: 11
По умолчанию Дата

Привет, подскажите пожалуйста, как сделать вот это:
Мне нужно вписать в ячейку дату 2007.07.01 и таких дат мне нужно вписать много.
Расположены они будут в столбец(ячейка под ячейкой).
Как сделать так, чтобы я набирал на клавиатуре 20070701 и после нажатия Enter, у меня автоматически проставились точки 2007.07.01

Спасибо.
P.S. Поиском по форуму пользовался, но не нашел этой темы(не знаю даже как эту функцию назвать), если она уже обсуждалась, дайте пожалуйста ссылку.
antfrolov вне форума
Старый 11.01.2010, 10:07   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

См. во вложении пример для столбца "A".
Вложения
Тип файла: rar Книга1.rar (6.1 Кб, 12 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 11.01.2010, 11:05   #3
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
См. во вложении пример для столбца "A".
Замечу только, что в момент ввода даты в ячейку у ячейки должен быть формат "Общий" (ну или какой-то подобный, главное, чтобы не был установлен формат "Дата")
Иначе макрос вылетает с ошибкой переполнения
(при вводе в ячейку, имеющую формат Дата, какого-нибудь большого числа - например, 20070303, в ячейке оказывается текст #######)

Короче, заменить ранее введённую дату при таком алгоритме вряд ли получится...
EducatedFool вне форума
Старый 11.01.2010, 11:09   #4
antfrolov
Пользователь
 
Регистрация: 05.04.2008
Сообщений: 11
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
См. во вложении пример для столбца "A".
Вот и у меня получилось ###### причем в А1, а в A2 ничего не происходит.
Вопрос актуален.
antfrolov вне форума
Старый 11.01.2010, 11:42   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Немного изменил макрос - теперь всё работает:

Код:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 1 Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    txt = Target.Value2
    If Len(txt) <> 8 Or Not IsNumeric(txt) Then Exit Sub
    On Error Resume Next
    newdate = DateSerial(Left$(txt, 4), Mid$(txt, 5, 2), Right$(txt, 2))
    If IsDate(newdate) Then Target = newdate
End Sub
Пример файла:


Последний раз редактировалось EducatedFool; 11.01.2010 в 11:45.
EducatedFool вне форума
Старый 11.01.2010, 11:54   #6
antfrolov
Пользователь
 
Регистрация: 05.04.2008
Сообщений: 11
По умолчанию

Странно, ввожу дату, а всё равно ######## перед тем, как пользоваться этим файлом мне нужно было что-то сделать? Я просто открыл и вписал в А4 дату, получилось #######
antfrolov вне форума
Старый 11.01.2010, 11:55   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Согласен с замечаниями. При необходимости нужно делать еще дополнительные проверки введенных данных. Можно, конечно, предусмотреть все возможные случаи, но это уже дело техники.
Так, например, предложенный Вами макрос тоже "вылетит" с ошибкой при вводе числа 12345678.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума
Старый 11.01.2010, 12:02   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Сообщение от antfrolov Посмотреть сообщение
Странно, ввожу дату, а всё равно ######## перед тем, как пользоваться этим файлом мне нужно было что-то сделать? Я просто открыл и вписал в А4 дату, получилось #######
А в каком формате Вы её вводите?
Также, как и собирались изначально - 20070701
(то етсь в формате ГГГГММДД) ?

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Так, например, предложенный Вами макрос тоже "вылетит" с ошибкой при вводе числа 12345678.
Я увидел это чуть позже, поэтому внес в код коррективы:
Код:
    On Error Resume Next
    newdate = DateSerial(Left$(txt, 4), Mid$(txt, 5, 2), Right$(txt, 2))
    If IsDate(newdate) Then Target = newdate
EducatedFool вне форума
Старый 11.01.2010, 12:11   #9
antfrolov
Пользователь
 
Регистрация: 05.04.2008
Сообщений: 11
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А в каком формате Вы её вводите?
Также, как и собирались изначально - 20070701
(то етсь в формате ГГГГММДД) ?
Да. И так вводил и наоборот...
antfrolov вне форума
Старый 11.01.2010, 12:13   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Да. И так вводил и наоборот...
Ну и? Что происходит?
Я ввожу в ячейку 20070701 - через мгновение получаю в ячейке результат 01.07.2007

Надеюсь, у Вас макросы не отключены?
EducatedFool вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дата okpb Microsoft Office Excel 5 19.05.2009 07:27
Дата Bigtyoma Общие вопросы Delphi 18 24.12.2008 22:03
Дата Конечная (ДД.ММ.ГГГГ) - Дата Начальная (ДД.ММ.ГГГГ) = Количество Месяцев stanislav24 Microsoft Office Excel 5 20.12.2008 10:36
Дата Iskin Microsoft Office Excel 6 10.10.2008 12:41
Дата werser Общие вопросы Delphi 1 05.06.2008 22:45