Страницы: 1
RSS
Преобразовать текстовые значения ячеек, которые могут интерпретироваться как числа и/или даты
 
чтобы его(форматирование) вернуть, нужно через F2 зайти в ячейку и тогда начинает опять работать. Нашел только такой момент:

Цитата
Application.SendKeys "{F2}", True
эта строка работает только с активной ячейкой, а вот как эту команду , чтобы работало по всему диапазону столбца D неосиливаю. Може кто поможе?
 
Домкрат, опишите проблему, а не способ решения — 99%, что можно решить без SendKeys
Пока проверьте, включен ли в настройках автопересчёт формул
Изменено: Jack Famous - 16.12.2019 13:28:45
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Jack Famous, в ячейке D2 условное форматирование применяется только, если на неё нажать.

P.S. Просто я сам решение пока не нашёл.
Изменено: Wiss - 16.12.2019 13:37:59
Я не волшебник, я только учусь.
 
Цитата
Jack Famous написал:
Пока проверьте, включен ли в настройках автопересчёт формул
да, нормально все с пересчетом, проверил.

Цитата
Jack Famous написал:
опишите проблему,
а проблема в том, после работы другого макроса(иногда) все ячейки становятся зелеными, и чтобы условное опять заработало, нужно пройтись вручную по ячейкам.т.е. -зайти в ячейку, и тогда опять все норм, а как вернутьУФ другим сособом я не ведаю.
Изменено: Домкрат - 16.12.2019 13:44:44
 
Выделять столбец с датами
- Ctrl+H
- найти: точку
- заменить на: точку
- Заменить все

Дело в том, что у Вас там не даты, а текст, выглядящий как дата. А в УФ условие для дат
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
у Вас там не даты
а как же тогда уже лет 5 там все работает???
если до сегодняшей даты 10 остается- желтый цвет, если просрочена= красный, если просрочена меньше 10 дней- синий,КАК ОНО ТОГДА РАБОТАЕТ?????
 
Цитата
Домкрат написал:
а как же тогда уже лет 5 там все работает???
Так оно работает? Тогда прошу пардону, проигнорируйте мое сообщение и работайте дальше в своем файле.
Я написал как исправить то, что Вы приложили и написал так же почему именно оно не работает. Но раз у Вас все работает - то зачем создали эту тему? :)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Ваш способ все-равно ссылается на заход в ячейку, неважно: точку на точну менять, или 2 на 2 и.т.д.
 
Цитата
Домкрат написал:
Ваш способ все-равно ссылается на заход в ячейку,
Да? А почему я выделил все ячейки, нажал Ctrl+H и заменил во всех ячейках сразу? Вы чего хотите-то? Чтобы заработало и было быстро и просто или чтобы обязательно SendKeys был и через гланды? Какова цель?
Может Вы просто не понимаете что происходит или не хотите понять? В какой-то момент Ваши даты стали ТЕКСТОМ. Скорее всего именно в этот:
Цитата
Домкрат написал:
после работы другого макроса(
И Excel теперь не считает эти даты датами. Поэтому не работает УФ. Замена точки на точку для всех ячеек с датами заставляет Excel изменить тип данных в ячейке и привести его к дате, если с значением в ячейке это вообще реально сделать.
Изменено: Дмитрий(The_Prist) Щербаков - 16.12.2019 14:02:15
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
зачем создали эту тему?
потому что иногда УФ вылетает, и тема вопроса- как исправить УФ по-быстрому, ваш способ в принципе подходит- напишу макрос, по этим мотивам, но всё-таки хотелось бы увидеть как с помощью Application.SendKeys "{F2}", True - пройтись по диапазону- хочется мне дюже)  
 
Цитата
Домкрат написал:
хочется мне дюже
не, ну если ломом хотите подметать, зачем мы будем препятствовать? :) Заморачиваться с полностью автоматизированным кодом ради удовлетворения Вашей хотелки(нерабочей вообще) не охота мне. Поэтому допиливайте сами. Код берет ячейки от 2 до 21
Код
Sub CallSendKeys()
    Dim lr&
    For lr = 2 To 21
        Cells(lr, 4).Select
        Application.SendKeys "{F2}", True
    Next
End Sub

Но учтите, что это ничего не даст, т.к. преобразование произойдет только если это делать не кодом. Из VBA нажатие F2 ровным счетом никакого эффекта не сделает, равно как из вызова замены кодом(метод Replace объекта Range).
Здесь надо делать иначе:
Код
Sub CallSendKeys()
    Dim lr&
    Application.ScreenUpdating = 0
    For lr = 2 To 21
        If IsDate(Cells(lr, 4).Value) Then
            Cells(lr, 4).Value = CDate(Cells(lr, 4).Value)
        End If
    Next
    Application.ScreenUpdating = 1
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Какова цель?
ну, интересно мне просто! интересно и всё, каким образом прописать сендкей на диапазон.
Цитата
Дмитрий(The_Prist) Щербаков написал:
Замена точки на точку для всех ячеек с датами заставляет Excel изменить тип данных
не только точку на точку- а любой знак, например 2 на 2 - будет тоже самое. А замена знака не является ли заходом в ячейку разви?"смайлик с поцелуем"
 
Цитата
Домкрат написал:
А замена знака не является ли заходом в ячейку разви?
с чего Вы взяли? Нет, ну технически данные с ячейки считываются и кладутся обратно. И когда они перезаписываются Excel пытается произвести преобразование типов так же, как это происходит при вводе в ячейку. Но самого как Вы назвали "захода" в ячейку нет.
И к тому же, замена точки на точку будет работать для любой даты, а замена 2 на 2 - только для тех дат, у которых 2 есть в отображении. Например, для таких дат не сработает:
01.01.1998
11.10.19
и т.п.
Поэтому точки наиболее предпочтительны, т.к. являются разделителями дат.
Изменено: Дмитрий(The_Prist) Щербаков - 16.12.2019 14:20:53
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Домкрат: замена знака не является ли заходом в ячейку разви?
неа
вам ещё дохрена чудес откроется — стоит только начать разбираться

P.S.: вам решение готовое дают, а вы шутить пытаетесь…
P.P.S.:
Цитата
Домкрат: "смайлик с поцелуем"
у нас тут с Домкратами не целуются  8)
Изменено: Jack Famous - 16.12.2019 14:21:42
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
а вы шутить пытаетесь…
я только из больших чувств! так сказать от переполненных эмоций
 
Цитата
Домкрат написал:
интересно и всё, каким образом прописать сендкей на диапазон.
Вы можете это сделать без макроса? Я про использовать F2 для диапазона? За исключением случая выделения нескольких листов или использования формулы массива для диапазона.
По вопросам из тем форума, личку не читаю.
 
Добрый день, коллеги!
В данном случае аналогом пробежки по ячейкам будет
Код
Selection.FormulaLocal = Selection.FormulaLocal
Изменено: sokol92 - 16.12.2019 14:30:54
Владимир
 
уважаемый, Домкрат,
вам предлагаеют решение, но оно вас не интересует, вам интересно пройтись {F2}", True и пр.
интересно - проходитесь на здоровье, хозяин-барин. похоже никому, кроме вас этот способ не интересен, но он вполне рабочий, повозитесь немного и прикрутите
и УФ там не вылетает он добросовестно считает те данные, что ему подсунули, на самом деле как только перестанете заполнять ячейки чем попало - тут же УФ начнет работать как задумано, и не нужно по ним ничем проходить, достаточно положить туда адекватные данные и тут же отвалится совершенно надуманная тема с SendKeys, если проанализировать и ликвидировать источник, засыпающий ячейки всякими отходами вместо чистых дат
удачи!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
sokol92, приветствую!
Но в вашем методе нет передачи "F2" в цикле, а значит это совсем не то  :D
Изменено: Jack Famous - 16.12.2019 14:33:07
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Из VBA нажатие F2 ровным счетом никакого эффекта не сделает
Вы всё разрушили, все мои мечты по завоеванию планеты((!
 
Цитата
sokol92 написал:
Добрый день, коллеги!В данном случае аналогом пробежки по ячейкам будет Код: 1Selection.FormulaLocal = Selection.FormulaLocal
Да, Ваш метод работает, спасибо!  
 
Дмитрий(The_Prist) Щербаков, Ваш второй макрос в архив на этот файл поставлю, чтобы было, спасибо большое!
ну, а первый будет вот так выглядеть, его как основной оставлю, таки моя мечта в урезанном виде всё-таки збылась:
Код
Sub CallSendKeys()
    Dim iLastRow As Long
    Dim lr&
    iLastRow = Cells(Rows.Count, 4).End(xlUp).Row
    For lr = 2 To iLastRow
        Cells(lr, 4).Select
        'Application.SendKeys "{F2}", True ' прости (The_Prist)))
        Selection.FormulaLocal = Selection.FormulaLocal ' sokol92 подогнал тему)))
        
    Next
End Sub
Изменено: Домкрат - 16.12.2019 14:50:31
 
Квинтэссенция всех этих трюков заключается в следующем.
Если в диапазоне ячеек содержатся тексты, которые могут быть интерпретированы как числа и/или даты с учетом региональных настроек (на данном компьютере), то используем метод из #17 (переприсваиваем свойство FormulaLocal).
Если в диапазоне ячеек содержатся тексты, которые могут быть  интерпретированы как числа и/или даты в "американском" формате, то переприсваиваем свойство Formula диапазона (или свойство Value).

При использовании метода Range.Replace следует учитывать, что он "игнорирует" региональные настройки.
Владимир
 
sokol92, да, теперь красота ваще настала:
 
Для модераторов. Тема: Как макросом преобразовать текстовые значения ячеек, которые могут интерпретироваться как числа и/или даты
Изменено: sokol92 - 16.12.2019 15:29:17
Владимир
 
Домкрат, не нужно создать сообщения "с пулемета", достаточно вернуться и дополнить предыдущее.
Страницы: 1
Наверх