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

Вход

Регистрация

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

 

= Мир MS Excel/автодополнение ввода даты годом в заданном столбце - Страница 2 - Мир MS Excel

  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: китин, _Boroda_, DrMini  
автодополнение ввода даты годом в заданном столбце
RAN Дата: Четверг, 04.12.2014, 16:40 | Сообщение № 21
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Есть такой момент, с запятой не проверил. Это все Excel мудрит, с запятой число преобразует.
Нужно формат ячейки -текст.
А формат ввода 1,10, специально сделан ошибкой. Даже не предполагал, что так вводить можно/нужно. :)


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЕсть такой момент, с запятой не проверил. Это все Excel мудрит, с запятой число преобразует.
Нужно формат ячейки -текст.
А формат ввода 1,10, специально сделан ошибкой. Даже не предполагал, что так вводить можно/нужно. :)

Автор - RAN
Дата добавления - 04.12.2014 в 16:40
Wasilich Дата: Четверг, 04.12.2014, 21:38 | Сообщение № 22
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
А зачем с запятой? А без нее еще проще! :)
А как с проверкой ввода дня и месяца? Мудрить надо. Короче, дерзайте.
Пример слямзил с этого форума.
 
Ответить
СообщениеА зачем с запятой? А без нее еще проще! :)
А как с проверкой ввода дня и месяца? Мудрить надо. Короче, дерзайте.
Пример слямзил с этого форума.

Автор - Wasilich
Дата добавления - 04.12.2014 в 21:38
SLAVICK Дата: Четверг, 04.12.2014, 22:45 | Сообщение № 23
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
А как с проверкой ввода дня и месяца? Мудрить надо. Короче, дерзайте.

А вы попробуйте ввести 2902 :D
А как ввести дату 29.02.12 по сокращенной схеме :)
Код тоже требует доработки.
А что не так в моем последнем файле? там проверка дата или нет - если нет то возвращает введенный текст ;)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
А как с проверкой ввода дня и месяца? Мудрить надо. Короче, дерзайте.

А вы попробуйте ввести 2902 :D
А как ввести дату 29.02.12 по сокращенной схеме :)
Код тоже требует доработки.
А что не так в моем последнем файле? там проверка дата или нет - если нет то возвращает введенный текст ;)

Автор - SLAVICK
Дата добавления - 04.12.2014 в 22:45
карандаш Дата: Пятница, 05.12.2014, 16:59 | Сообщение № 24
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
SLAVICK, тут ошибка иногда выскакивает (в программке из первого поста) на строке

If InStr(1, Target.Value, ",") = 0 Then Exit Sub

говорит - несовпадение типов (Type mismatch)

попробовал вставить
If Not IsStr(Target.Value) Then Exit Sub
говорит, что такой фукции нет

как предотвратить ошибку?
 
Ответить
СообщениеSLAVICK, тут ошибка иногда выскакивает (в программке из первого поста) на строке

If InStr(1, Target.Value, ",") = 0 Then Exit Sub

говорит - несовпадение типов (Type mismatch)

попробовал вставить
If Not IsStr(Target.Value) Then Exit Sub
говорит, что такой фукции нет

как предотвратить ошибку?

Автор - карандаш
Дата добавления - 05.12.2014 в 16:59
SLAVICK Дата: Пятница, 05.12.2014, 22:33 | Сообщение № 25
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
isstr :D конечно нет.
когда выдает ошибку? что вводите?
по идее не должно останавливаться на этой строке. вложите файл и напишите что вводили и в какую ячейку. так сложно сказать :o


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениеisstr :D конечно нет.
когда выдает ошибку? что вводите?
по идее не должно останавливаться на этой строке. вложите файл и напишите что вводили и в какую ячейку. так сложно сказать :o

Автор - SLAVICK
Дата добавления - 05.12.2014 в 22:33
RAN Дата: Пятница, 05.12.2014, 23:14 | Сообщение № 26
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Наиболее вероятно, что это никак не преодолеть.
Вероятная причина возникновения - в ячейке установлен не общий формат, а формат даты, или числовой, или...
При передаче значения в макрос происходит преобразование типа (причем именно до передачи значения и запуска макроса), макрос получает значение не соответствующего типа и выдает ошибку.
Костыль - отслеживать формат ячейки, при не соответствии изменять формат и предлагать повторный ввод.

Проблема сродни "как заставить Excel при вставке копипастом НЕ преобразовывать 1.1 в 1 января"

Я, вроде, допилил свой макрос, но при изменении формата ячейки с общего на дата, получается не дата, а погода в Африке.
К сообщению приложен файл: CellDatValid.xls (43.0 Kb)


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Пятница, 05.12.2014, 23:47
 
Ответить
СообщениеНаиболее вероятно, что это никак не преодолеть.
Вероятная причина возникновения - в ячейке установлен не общий формат, а формат даты, или числовой, или...
При передаче значения в макрос происходит преобразование типа (причем именно до передачи значения и запуска макроса), макрос получает значение не соответствующего типа и выдает ошибку.
Костыль - отслеживать формат ячейки, при не соответствии изменять формат и предлагать повторный ввод.

Проблема сродни "как заставить Excel при вставке копипастом НЕ преобразовывать 1.1 в 1 января"

Я, вроде, допилил свой макрос, но при изменении формата ячейки с общего на дата, получается не дата, а погода в Африке.

Автор - RAN
Дата добавления - 05.12.2014 в 23:14
Wasilich Дата: Суббота, 06.12.2014, 09:59 | Сообщение № 27
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
А вы попробуйте ввести 2902 :D
А как ввести дату 29.02.12 по сокращенной схеме :)
Код тоже требует доработки.
Вот и я о том же
А как с проверкой ввода дня и месяца? Мудрить надо.
А во вторых SLAVICK, сообщение адресовано не Вам. А то, что код требует доработки, так на то и существует серое вещество. Если ТСу потребуется - доработает, если нет воспользуется Вашим готовым. Я же предложил пример для ввода 4-х знаков без запятой для самого быстрого ввода и особо с ним не разбирался. Ну если сильно надо, то пожалуйста.
Хотя можно сделать на много короче. Только мне не надо.
 
Ответить
Сообщение
А вы попробуйте ввести 2902 :D
А как ввести дату 29.02.12 по сокращенной схеме :)
Код тоже требует доработки.
Вот и я о том же
А как с проверкой ввода дня и месяца? Мудрить надо.
А во вторых SLAVICK, сообщение адресовано не Вам. А то, что код требует доработки, так на то и существует серое вещество. Если ТСу потребуется - доработает, если нет воспользуется Вашим готовым. Я же предложил пример для ввода 4-х знаков без запятой для самого быстрого ввода и особо с ним не разбирался. Ну если сильно надо, то пожалуйста.
Хотя можно сделать на много короче. Только мне не надо.

Автор - Wasilich
Дата добавления - 06.12.2014 в 09:59
SLAVICK Дата: Суббота, 06.12.2014, 10:38 | Сообщение № 28
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
во вторых SLAVICK, сообщение адресовано не Вам

Вы же не уточняли. :D beer


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
во вторых SLAVICK, сообщение адресовано не Вам

Вы же не уточняли. :D beer

Автор - SLAVICK
Дата добавления - 06.12.2014 в 10:38
SLAVICK Дата: Суббота, 06.12.2014, 14:29 | Сообщение № 29
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вероятная причина возникновения - в ячейке установлен не общий формат, а формат даты, или числовой, или..

Если это так - попробуйте изменить немного код
[vba]
Код
Dim s$
If Target.Count > 1 Then Exit Sub
s = Target.Value
If InStr(1, s, ",") = 0 Then Exit Sub
[/vba]
я поставил передачу значения в "s" до поиска запятой, а поиск уже в переменной. По идее должно помочь.
если ошибка будет все равно - можно заменить
s = Target.Value
на
s = Target.Text :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Суббота, 06.12.2014, 14:31
 
Ответить
Сообщение
Вероятная причина возникновения - в ячейке установлен не общий формат, а формат даты, или числовой, или..

Если это так - попробуйте изменить немного код
[vba]
Код
Dim s$
If Target.Count > 1 Then Exit Sub
s = Target.Value
If InStr(1, s, ",") = 0 Then Exit Sub
[/vba]
я поставил передачу значения в "s" до поиска запятой, а поиск уже в переменной. По идее должно помочь.
если ошибка будет все равно - можно заменить
s = Target.Value
на
s = Target.Text :D

Автор - SLAVICK
Дата добавления - 06.12.2014 в 14:29
RAN Дата: Суббота, 06.12.2014, 15:15 | Сообщение № 30
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Не поможет.
Точнее, может помочь для отдельных случаев, когда Excel не может преобразовать введенный текст в значение соответствующего типа. Например, если текст содержит 2 запятые.
А при вводе без разделителей - сначала происходит преобразованте, а после уже преобразованное значение передается в функцию.

Я и писал это (немного в другом виде) для текстбокса формы. Там все отлично.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНе поможет.
Точнее, может помочь для отдельных случаев, когда Excel не может преобразовать введенный текст в значение соответствующего типа. Например, если текст содержит 2 запятые.
А при вводе без разделителей - сначала происходит преобразованте, а после уже преобразованное значение передается в функцию.

Я и писал это (немного в другом виде) для текстбокса формы. Там все отлично.

Автор - RAN
Дата добавления - 06.12.2014 в 15:15
SLAVICK Дата: Суббота, 06.12.2014, 15:40 | Сообщение № 31
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
А пример конкретнее - можно?
Про то что Excel преобразовывает данные до - я знаю, но в каком случае оно будет выдавать ошибку?


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеА пример конкретнее - можно?
Про то что Excel преобразовывает данные до - я знаю, но в каком случае оно будет выдавать ошибку?

Автор - SLAVICK
Дата добавления - 06.12.2014 в 15:40
RAN Дата: Суббота, 06.12.2014, 18:57 | Сообщение № 32
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А куда конкретнее?
"01,10" преобразуется в "1,1", "1,1" передается в функцию, и, в результате, получаем 01.01.1900
При формате ячейки "дата" 1111 будет сначала преобразовано в дату"15.01.1903", а после передано в функцию. И на выходе - погода в Африке. :D
А при формате "общий" в функцию будет передано "1111", что распознается и обработается как 11.11.2014.
Если "1,1," не может быть преобразовано, оно и будет передано как "1,1,", а дальше все в шляпе.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА куда конкретнее?
"01,10" преобразуется в "1,1", "1,1" передается в функцию, и, в результате, получаем 01.01.1900
При формате ячейки "дата" 1111 будет сначала преобразовано в дату"15.01.1903", а после передано в функцию. И на выходе - погода в Африке. :D
А при формате "общий" в функцию будет передано "1111", что распознается и обработается как 11.11.2014.
Если "1,1," не может быть преобразовано, оно и будет передано как "1,1,", а дальше все в шляпе.

Автор - RAN
Дата добавления - 06.12.2014 в 18:57
SLAVICK Дата: Суббота, 06.12.2014, 19:41 | Сообщение № 33
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Так при этом код выдавать ошибку все равно не должен - некорректно преобразовывать - да, но сообщения об ошибке нет. :o

В файле с 14-го поста нужен текстовый формат ячеек -тогда все правильно.
В примере с 15-го поста(где 2-е запятые) - можно любой формат оставлять.


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Суббота, 06.12.2014, 19:41
 
Ответить
СообщениеТак при этом код выдавать ошибку все равно не должен - некорректно преобразовывать - да, но сообщения об ошибке нет. :o

В файле с 14-го поста нужен текстовый формат ячеек -тогда все правильно.
В примере с 15-го поста(где 2-е запятые) - можно любой формат оставлять.

Автор - SLAVICK
Дата добавления - 06.12.2014 в 19:41
карандаш Дата: Воскресенье, 07.12.2014, 15:31 | Сообщение № 34
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
Уважаемые эксперты и специалисты!

если немного уточнить ТЗ

есть столбцы, отформатированные как "дата"
макрос общий для ВСЕХ ячеек (т.е. учитывать номер столбца не нужно)
Но перед попыткой преобразования (при проверке на запятые) проверять формат ячейки
Если она НЕ "дата", то выходим.
Иначе продолжаем и проверяем на запятые проверенным способом.
Таким образом имеем простой макрос и без ошибок преобразования.

Каким кодом можно проверить формат ячейки?
 
Ответить
СообщениеУважаемые эксперты и специалисты!

если немного уточнить ТЗ

есть столбцы, отформатированные как "дата"
макрос общий для ВСЕХ ячеек (т.е. учитывать номер столбца не нужно)
Но перед попыткой преобразования (при проверке на запятые) проверять формат ячейки
Если она НЕ "дата", то выходим.
Иначе продолжаем и проверяем на запятые проверенным способом.
Таким образом имеем простой макрос и без ошибок преобразования.

Каким кодом можно проверить формат ячейки?

Автор - карандаш
Дата добавления - 07.12.2014 в 15:31
карандаш Дата: Воскресенье, 07.12.2014, 15:35 | Сообщение № 35
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
isstr конечно нет.
когда выдает ошибку? что вводите?
по идее не должно останавливаться на этой строке. вложите файл и напишите что вводили и в какую ячейку. так сложно сказать


не помню точно. Но один раз макрос ругался на число типа 7230945
другой раз ещё на что-то, что не было датой и было не в столбце в датами - то ли текст, то ли ещё что-то. Не смог воспроизвести.
т.е. ошибка преобразования возникала тогда, когда был ввод не даты не в ячейке для даты.

файл прикрепить не могу, т.к. он не "чистый" (т.е. не "академический" - содержит правила раскраски по условиям, в формате 2010 и с кучей страниц). На "голом" файле воспроизвести не могу.


Сообщение отредактировал карандаш - Воскресенье, 07.12.2014, 15:38
 
Ответить
Сообщение
isstr конечно нет.
когда выдает ошибку? что вводите?
по идее не должно останавливаться на этой строке. вложите файл и напишите что вводили и в какую ячейку. так сложно сказать


не помню точно. Но один раз макрос ругался на число типа 7230945
другой раз ещё на что-то, что не было датой и было не в столбце в датами - то ли текст, то ли ещё что-то. Не смог воспроизвести.
т.е. ошибка преобразования возникала тогда, когда был ввод не даты не в ячейке для даты.

файл прикрепить не могу, т.к. он не "чистый" (т.е. не "академический" - содержит правила раскраски по условиям, в формате 2010 и с кучей страниц). На "голом" файле воспроизвести не могу.

Автор - карандаш
Дата добавления - 07.12.2014 в 15:35
SLAVICK Дата: Воскресенье, 07.12.2014, 16:37 | Сообщение № 36
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Поставьте
[vba]
Код
If Not Target.NumberFormat = "mm.dd.yyyy" Then Exit Sub
[/vba]

сразу после после
[vba]
Код
If Target.Count > 1 Then Exit Sub
[/vba]

"mm.dd.yyyy" - формат типа данных ячейки, какой у Вас не знаю.
Если Вы тоже не знаете - воспользуйтесь макрорекордером. :D


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Воскресенье, 07.12.2014, 16:42
 
Ответить
СообщениеПоставьте
[vba]
Код
If Not Target.NumberFormat = "mm.dd.yyyy" Then Exit Sub
[/vba]

сразу после после
[vba]
Код
If Target.Count > 1 Then Exit Sub
[/vba]

"mm.dd.yyyy" - формат типа данных ячейки, какой у Вас не знаю.
Если Вы тоже не знаете - воспользуйтесь макрорекордером. :D

Автор - SLAVICK
Дата добавления - 07.12.2014 в 16:37
карандаш Дата: Понедельник, 08.12.2014, 07:51 | Сообщение № 37
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
SLAVICK, не работает
 
Ответить
СообщениеSLAVICK, не работает

Автор - карандаш
Дата добавления - 08.12.2014 в 07:51
SLAVICK Дата: Понедельник, 08.12.2014, 08:42 | Сообщение № 38
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Давайте файл пример. Без файла не разобраться :D


Иногда все проще чем кажется с первого взгляда.
 
Ответить
СообщениеДавайте файл пример. Без файла не разобраться :D

Автор - SLAVICK
Дата добавления - 08.12.2014 в 08:42
карандаш Дата: Понедельник, 08.12.2014, 09:36 | Сообщение № 39
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 8 ±
Замечаний: 0% ±

2010
SLAVICK, пример
К сообщению приложен файл: 1916385.xlsm (25.3 Kb)
 
Ответить
СообщениеSLAVICK, пример

Автор - карандаш
Дата добавления - 08.12.2014 в 09:36
SLAVICK Дата: Понедельник, 08.12.2014, 12:20 | Сообщение № 40
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вот:
К сообщению приложен файл: 6572331.xlsm (25.4 Kb)


Иногда все проще чем кажется с первого взгляда.

Сообщение отредактировал SLAVICK - Понедельник, 08.12.2014, 12:23
 
Ответить
СообщениеВот:

Автор - SLAVICK
Дата добавления - 08.12.2014 в 12:20
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:

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