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

Вход

Регистрация

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

 

= Мир MS Excel/УФ макросом для части текста в ячейке и его выделения - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » УФ макросом для части текста в ячейке и его выделения (Макросы/Sub)
УФ макросом для части текста в ячейке и его выделения
lebensvoll Дата: Среда, 10.02.2021, 06:19 | Сообщение № 1
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Доброго утра многоуважаемые форумчане!!!
Помогите реализовать на листе условное форматирование макросом.
Объясню почему именно им!!!
Нужно чтоб при условии УФ окрашивалась часть текста (дата) и согласно выполняемому условию
Начал записывать через Macro Recorde но разбивал эту задачу на две части
1. Прописание самого условия формулой
2. Окрашиванием части текста (дата) в нужные мне (цвет; подчеркивание; жирный; курсив)
И когда начинаю объединять запись то :'(

Данное условие потом хочу прописать на листе Worksheet_Change(ByVal Target As Range) 'любые изменения на листе где уже есть ряд других кодов.
ПОМОГИТЕ ПОЖАЛУЙСТА РЕАЛИЗОВАТЬ ЗАДУМАННОЕ
К сообщению приложен файл: 8289114.xlsm (20.2 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеДоброго утра многоуважаемые форумчане!!!
Помогите реализовать на листе условное форматирование макросом.
Объясню почему именно им!!!
Нужно чтоб при условии УФ окрашивалась часть текста (дата) и согласно выполняемому условию
Начал записывать через Macro Recorde но разбивал эту задачу на две части
1. Прописание самого условия формулой
2. Окрашиванием части текста (дата) в нужные мне (цвет; подчеркивание; жирный; курсив)
И когда начинаю объединять запись то :'(

Данное условие потом хочу прописать на листе Worksheet_Change(ByVal Target As Range) 'любые изменения на листе где уже есть ряд других кодов.
ПОМОГИТЕ ПОЖАЛУЙСТА РЕАЛИЗОВАТЬ ЗАДУМАННОЕ

Автор - lebensvoll
Дата добавления - 10.02.2021 в 06:19
Kuzmich Дата: Среда, 10.02.2021, 17:26 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
окрашивалась часть текста (дата) и согласно выполняемому условию

Попробуйте так
[vba]
Код
Sub iДата()
Dim i As Long
Dim iLastRow
Dim iДата As Object
With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "от (\d{1,2}\.\d{1,2}\.\d{2,4})"
iLastRow = Range("A2").End(xlDown).Row
Range("A2:A" & iLastRow).Interior.ColorIndex = xlNone
   For i = 2 To iLastRow
     If .Test(Cells(i, "A")) Then
          Set iДата = .Execute(Cells(i, "A"))(0)
       If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then
          Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font.ColorIndex = 3
       ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
          Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font.ColorIndex = 4
       ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date + 60 And _
              CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) > Date Then
          Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font.ColorIndex = 5
       End If
     End If
  Next
End With
End Sub
[/vba]
 
Ответить
Сообщение
Цитата
окрашивалась часть текста (дата) и согласно выполняемому условию

Попробуйте так
[vba]
Код
Sub iДата()
Dim i As Long
Dim iLastRow
Dim iДата As Object
With CreateObject("VBScript.RegExp")
     .Global = True
     .Pattern = "от (\d{1,2}\.\d{1,2}\.\d{2,4})"
iLastRow = Range("A2").End(xlDown).Row
Range("A2:A" & iLastRow).Interior.ColorIndex = xlNone
   For i = 2 To iLastRow
     If .Test(Cells(i, "A")) Then
          Set iДата = .Execute(Cells(i, "A"))(0)
       If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then
          Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font.ColorIndex = 3
       ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
          Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font.ColorIndex = 4
       ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date + 60 And _
              CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) > Date Then
          Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font.ColorIndex = 5
       End If
     End If
  Next
End With
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 10.02.2021 в 17:26
lebensvoll Дата: Среда, 10.02.2021, 18:12 | Сообщение № 3
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Kuzmich, спасибо огромнейшее за ответ.
Мне так очень сложно воспринимать vba когда прям кодом начинают прописывать (((((
Но, немного понял
Но и тут получается что срабатывание происходит лишь выделение красным (но без подчеркивания и выделения жирным)
[vba]
Код
  'первое УФ
    If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then
        Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font
                        .ColorIndex = 3 'окрашивание в красный
                        .FontStyle = "полужирный курсив" 'выделение полужирным
[/vba]
Дополнил код
Цитата
.FontStyle = "полужирный курсив" 'выделение полужирным

и вообще ругаться стал %)
[img][/img]

Данное дополнение сделал по аналогии когда производил запись через макрорекордера.
Да как я понял уменя в третьем условии (в моих формулах) вообще не получается осуществить выполнение (((( условия
К сообщению приложен файл: 2640380.xlsm (23.4 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 10.02.2021, 18:17
 
Ответить
СообщениеKuzmich, спасибо огромнейшее за ответ.
Мне так очень сложно воспринимать vba когда прям кодом начинают прописывать (((((
Но, немного понял
Но и тут получается что срабатывание происходит лишь выделение красным (но без подчеркивания и выделения жирным)
[vba]
Код
  'первое УФ
    If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then
        Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font
                        .ColorIndex = 3 'окрашивание в красный
                        .FontStyle = "полужирный курсив" 'выделение полужирным
[/vba]
Дополнил код
Цитата
.FontStyle = "полужирный курсив" 'выделение полужирным

и вообще ругаться стал %)
[img][/img]

Данное дополнение сделал по аналогии когда производил запись через макрорекордера.
Да как я понял уменя в третьем условии (в моих формулах) вообще не получается осуществить выполнение (((( условия

Автор - lebensvoll
Дата добавления - 10.02.2021 в 18:12
Kuzmich Дата: Среда, 10.02.2021, 18:38 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Сделайте изменения
[vba]
Код
Range("A2:A" & iLastRow).Font.ColorIndex = 0
Range("A2:A" & iLastRow).Font.Bold = False
[/vba]
и
[vba]
Код
    If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then
        With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font
                       .ColorIndex = 3 'окрашивание в красный
                       .FontStyle = "полужирный курсив" 'выделение полужирным
        End With
[/vba]
и дальше также


Сообщение отредактировал Kuzmich - Среда, 10.02.2021, 19:08
 
Ответить
СообщениеСделайте изменения
[vba]
Код
Range("A2:A" & iLastRow).Font.ColorIndex = 0
Range("A2:A" & iLastRow).Font.Bold = False
[/vba]
и
[vba]
Код
    If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) < Date Then
        With Cells(i, "A").Characters(Start:=iДата.firstindex + 4, _
                        Length:=iДата.Length - 3).Font
                       .ColorIndex = 3 'окрашивание в красный
                       .FontStyle = "полужирный курсив" 'выделение полужирным
        End With
[/vba]
и дальше также

Автор - Kuzmich
Дата добавления - 10.02.2021 в 18:38
lebensvoll Дата: Среда, 10.02.2021, 22:28 | Сообщение № 5
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Kuzmich, макрос срабатывает на всех 5-ти записях в столбце А
но лишь 1-е условие и то неправильно (он просто окрашивает в красный цвет текст) даже если установить дату сегодня 16/09/20
ХОТЯЯЯЯЯЯ тут наверное мне не датой СЕГОДНЯ ИГРАТЬ НУЖНО а датой поверкой оборудования

И вот тут вот сработало 2-е условие но малость не так:
[img][/img]

Вот смотрите, имеется оборудование :КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
Данное оборудование сегодня прошла поверку и получила аттестат который действует год (есть оборудование которое действует два или три года)
В своем примере формулой я сделал так:
Код
=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))<G2

ячейка G2 момент сегодняшней даты а дата предыдущей проверки я вытягиваю от сюда
Цитата
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.

и плюсую еще год

В вашем решение с помощью макроса я так понимаю что Вы используете ИНДЕКС ДЛСТР (я же работал с одной ячейкой)
Мне бы тоже хотелось понять Ваш расчет макросом

[p.s.] и в третьем условии у меня вроде как не получается создать условие выделение желтым-оранжевым.
Если дата очередной поверки меньше сегодняшней даты на два месяца то "желтое" (оборудование подлежит поверке и скоро будет просроченное)
К сообщению приложен файл: 3951486.xlsm (24.5 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Среда, 10.02.2021, 22:40
 
Ответить
СообщениеKuzmich, макрос срабатывает на всех 5-ти записях в столбце А
но лишь 1-е условие и то неправильно (он просто окрашивает в красный цвет текст) даже если установить дату сегодня 16/09/20
ХОТЯЯЯЯЯЯ тут наверное мне не датой СЕГОДНЯ ИГРАТЬ НУЖНО а датой поверкой оборудования

И вот тут вот сработало 2-е условие но малость не так:
[img][/img]

Вот смотрите, имеется оборудование :КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
Данное оборудование сегодня прошла поверку и получила аттестат который действует год (есть оборудование которое действует два или три года)
В своем примере формулой я сделал так:
Код
=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))+1;МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))<G2

ячейка G2 момент сегодняшней даты а дата предыдущей проверки я вытягиваю от сюда
Цитата
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.

и плюсую еще год

В вашем решение с помощью макроса я так понимаю что Вы используете ИНДЕКС ДЛСТР (я же работал с одной ячейкой)
Мне бы тоже хотелось понять Ваш расчет макросом

[p.s.] и в третьем условии у меня вроде как не получается создать условие выделение желтым-оранжевым.
Если дата очередной поверки меньше сегодняшней даты на два месяца то "желтое" (оборудование подлежит поверке и скоро будет просроченное)

Автор - lebensvoll
Дата добавления - 10.02.2021 в 22:28
Kuzmich Дата: Среда, 10.02.2021, 22:57 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
В макросе дата очередной проверки вытягивается из
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
В переменной iДата будет 'от 10.02.2021'
И эта дата сравнивается с сегодняшней датой (Date), а не с ячейкой G2, как вы думаете
 
Ответить
СообщениеВ макросе дата очередной проверки вытягивается из
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.
В переменной iДата будет 'от 10.02.2021'
И эта дата сравнивается с сегодняшней датой (Date), а не с ячейкой G2, как вы думаете

Автор - Kuzmich
Дата добавления - 10.02.2021 в 22:57
lebensvoll Дата: Среда, 10.02.2021, 23:11 | Сообщение № 7
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Kuzmich, так в том то и смысл

Цитата
В макросе дата очередной проверки вытягивается из
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.


Цитата
В переменной iДата будет 'от 10.02.2021'


А в переменной должно 10.02.21 + 1 один год (в зависимости от оборудования срок 1-н год может измениться на 2 или 3)
И сравниваем ее с датой в ячейке Сегодня (на момент проведения испытания дата сегодня может также изменяться. Вдруг оператор задними числом составляет протокол испытания)

Kuzmich, может быть вы подсказали как в макрос формулой УФ сделать. Мне будет легче потом в дальнейшем править его (((( или подскажите как в вашем решении указать дату сегодня в ячейке


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеKuzmich, так в том то и смысл

Цитата
В макросе дата очередной проверки вытягивается из
КНТ протокол периодической аттестации №581-19 от 10.02.2021г.


Цитата
В переменной iДата будет 'от 10.02.2021'


А в переменной должно 10.02.21 + 1 один год (в зависимости от оборудования срок 1-н год может измениться на 2 или 3)
И сравниваем ее с датой в ячейке Сегодня (на момент проведения испытания дата сегодня может также изменяться. Вдруг оператор задними числом составляет протокол испытания)

Kuzmich, может быть вы подсказали как в макрос формулой УФ сделать. Мне будет легче потом в дальнейшем править его (((( или подскажите как в вашем решении указать дату сегодня в ячейке

Автор - lebensvoll
Дата добавления - 10.02.2021 в 23:11
Kuzmich Дата: Среда, 10.02.2021, 23:44 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
указать дату сегодня в ячейке

В ячейку пишите =сегодня()
Цитата
А в переменной должно 10.02.21

Вот это выражение будет дата проверки
[vba]
Код
CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba]
Сравниваем с сегодняшней датой
[vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
[/vba]
Это дата проверки=сегодняшней дате
А дальше сравнивайте как вам нужно
 
Ответить
Сообщение
Цитата
указать дату сегодня в ячейке

В ячейку пишите =сегодня()
Цитата
А в переменной должно 10.02.21

Вот это выражение будет дата проверки
[vba]
Код
CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba]
Сравниваем с сегодняшней датой
[vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
[/vba]
Это дата проверки=сегодняшней дате
А дальше сравнивайте как вам нужно

Автор - Kuzmich
Дата добавления - 10.02.2021 в 23:44
lebensvoll Дата: Четверг, 11.02.2021, 00:08 | Сообщение № 9
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Kuzmich, спасибо огромнейшее за отзывчивость, потраченное время и пояснение!!!
Понял что что не так это точно :'(
Цитата
Вот это выражение будет дата проверки

[vba]
Код
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba]
вот этот SubMatches Вы применили как обсуждается в этой теме My WebPage "Синтаксис регулярных выражений" немного понял но не до конца

уловил и вразумил дата проверки к примеру: от 11.02.2020г
[vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
[/vba]
Тут до меня тоже дошло после Вашего пояснения (но долго доходило) заменил на
[vba]
Код
Range("G2") Then
[/vba]
И если в данной ячейке указать дату 11.02.2021 то в столбце А (должна же окраситься в зеленый цвет, верно)!?
Но она почему то красная :'(
[img][/img]



Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 11.02.2021, 04:14
 
Ответить
СообщениеKuzmich, спасибо огромнейшее за отзывчивость, потраченное время и пояснение!!!
Понял что что не так это точно :'(
Цитата
Вот это выражение будет дата проверки

[vba]
Код
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba]
вот этот SubMatches Вы применили как обсуждается в этой теме My WebPage "Синтаксис регулярных выражений" немного понял но не до конца

уловил и вразумил дата проверки к примеру: от 11.02.2020г
[vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) = Date Then
[/vba]
Тут до меня тоже дошло после Вашего пояснения (но долго доходило) заменил на
[vba]
Код
Range("G2") Then
[/vba]
И если в данной ячейке указать дату 11.02.2021 то в столбце А (должна же окраситься в зеленый цвет, верно)!?
Но она почему то красная :'(
[img][/img]


Автор - lebensvoll
Дата добавления - 11.02.2021 в 00:08
lebensvoll Дата: Четверг, 11.02.2021, 02:55 | Сообщение № 10
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba]
Как к этой дате проверки прибавить 1 год!?
[vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) + 366
[/vba]
Думаю что так не правильно и вообще думаю не правильно :'( %)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 11.02.2021, 04:16
 
Ответить
Сообщение[vba]
Код
If CDate(.Execute(Cells(i, "A"))(0).SubMatches(0))
[/vba]
Как к этой дате проверки прибавить 1 год!?
[vba]
Код
ElseIf CDate(.Execute(Cells(i, "A"))(0).SubMatches(0)) + 366
[/vba]
Думаю что так не правильно и вообще думаю не правильно :'( %)

Автор - lebensvoll
Дата добавления - 11.02.2021 в 02:55
RAN Дата: Четверг, 11.02.2021, 08:58 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Думаю что так не правильно и вообще думаю не правильно

Если срок годности продукта до 01.01.2022, то сегодня он просрочен.
И это вы называете "думаю"?

[vba]
Код
Private Sub Worksheet_Calculate()
    Dim cl As Range, sDate$, dDate As Date, xDate&
    On Error Resume Next
    Me.Range("A:D").Font.ColorIndex = 0
    For Each cl In Intersect(Me.UsedRange.Cells, Me.Columns(1))
        If Len(cl) Then
            sDate = (Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10))
            sDate = Left(sDate, 9) & Val(Right(sDate, 1)) + Me.Range("F2")
            dDate = CDate(Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10))
            xDate = InStrRev(cl.Value, " ") + 1
            If dDate > Date Then
                With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font
                    .FontStyle = "полужирный курсив"
                    .Underline = xlUnderlineStyleSingle
                    .Color = vbRed
                End With
            ElseIf dDate = Me.Range("G2") Then
                With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font
                    .FontStyle = "полужирный курсив"
                    .Underline = xlUnderlineStyleSingle
                    .Color = vbGreen
                End With
            ElseIf dDate + (Application.EoMonth(Date, 0) - Application.EoMonth(Date, -2)) > Date And dDate < Date Then
                With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font
                    .FontStyle = "полужирный курсив"
                    .Underline = xlUnderlineStyleSingle
                    .Color = vbYellow
                End With
            End If
        End If
    Next
End Sub
[/vba]
Наличие на листе (в любой ячейке) формулы =СЕГОДНЯ() обязательно!
К сообщению приложен файл: 2044279.xlsm (26.5 Kb)


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

Сообщение отредактировал RAN - Четверг, 11.02.2021, 09:40
 
Ответить
Сообщение
Думаю что так не правильно и вообще думаю не правильно

Если срок годности продукта до 01.01.2022, то сегодня он просрочен.
И это вы называете "думаю"?

[vba]
Код
Private Sub Worksheet_Calculate()
    Dim cl As Range, sDate$, dDate As Date, xDate&
    On Error Resume Next
    Me.Range("A:D").Font.ColorIndex = 0
    For Each cl In Intersect(Me.UsedRange.Cells, Me.Columns(1))
        If Len(cl) Then
            sDate = (Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10))
            sDate = Left(sDate, 9) & Val(Right(sDate, 1)) + Me.Range("F2")
            dDate = CDate(Left(Mid(cl.Value, InStrRev(cl.Value, " ") + 1), 10))
            xDate = InStrRev(cl.Value, " ") + 1
            If dDate > Date Then
                With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font
                    .FontStyle = "полужирный курсив"
                    .Underline = xlUnderlineStyleSingle
                    .Color = vbRed
                End With
            ElseIf dDate = Me.Range("G2") Then
                With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font
                    .FontStyle = "полужирный курсив"
                    .Underline = xlUnderlineStyleSingle
                    .Color = vbGreen
                End With
            ElseIf dDate + (Application.EoMonth(Date, 0) - Application.EoMonth(Date, -2)) > Date And dDate < Date Then
                With cl.Characters(Start:=xDate, Length:=Len(cl) - xDate).Font
                    .FontStyle = "полужирный курсив"
                    .Underline = xlUnderlineStyleSingle
                    .Color = vbYellow
                End With
            End If
        End If
    Next
End Sub
[/vba]
Наличие на листе (в любой ячейке) формулы =СЕГОДНЯ() обязательно!

Автор - RAN
Дата добавления - 11.02.2021 в 08:58
lebensvoll Дата: Четверг, 11.02.2021, 11:26 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
RAN, спасибо за ответ и помощь!!!
но все не так:
КНТ протокол периодической аттестации №581-19 от 10.02.2020г.
10.02.20 "это дата поверки оборудования" следующая дата "поверки оборудования" будет через год т.е. 10.02.21
Я это делал формулой так
Код
=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))[u][b]+1[/b][/u];МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))

Что Вы что Kuzmich, завязались на текущей дате от сюда:
"КНТ протокол периодической аттестации №581-19 от 10.02.2020г."
По сути все верно но к данной дате не прибавляете год чтоб начать ее сравнивать с датой сегодня или с ячейкой где будет указана дата (типо сегодня)
[img][/img]

Давным, давно как то мне Борода (Александр) помог сделать подобный файл но там решение не макросом да и задача немного другого характера но условие выполнение тоже самое "График аттестации оборудования"
К сообщению приложен файл: ___.xls (71.0 Kb)


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 11.02.2021, 11:52
 
Ответить
СообщениеRAN, спасибо за ответ и помощь!!!
но все не так:
КНТ протокол периодической аттестации №581-19 от 10.02.2020г.
10.02.20 "это дата поверки оборудования" следующая дата "поверки оборудования" будет через год т.е. 10.02.21
Я это делал формулой так
Код
=ДАТА(ГОД(ПСТР(A2;ПОИСК("г.";A2;1)-10;10))[u][b]+1[/b][/u];МЕСЯЦ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10));ДЕНЬ(ПСТР(A2;ПОИСК("г.";A2;1)-10;10)))

Что Вы что Kuzmich, завязались на текущей дате от сюда:
"КНТ протокол периодической аттестации №581-19 от 10.02.2020г."
По сути все верно но к данной дате не прибавляете год чтоб начать ее сравнивать с датой сегодня или с ячейкой где будет указана дата (типо сегодня)
[img][/img]

Давным, давно как то мне Борода (Александр) помог сделать подобный файл но там решение не макросом да и задача немного другого характера но условие выполнение тоже самое "График аттестации оборудования"

Автор - lebensvoll
Дата добавления - 11.02.2021 в 11:26
RAN Дата: Четверг, 11.02.2021, 11:39 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Я же говорю, что вы не думаете.
Или, все ваши думы остаются у вас.
Мой макрос увеличивает дату не заданное количество лет. Но для всех записей на одно и то же число.
Для того, чтобы макрос работал как на картинке, нужно изменить одну строчку.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЯ же говорю, что вы не думаете.
Или, все ваши думы остаются у вас.
Мой макрос увеличивает дату не заданное количество лет. Но для всех записей на одно и то же число.
Для того, чтобы макрос работал как на картинке, нужно изменить одну строчку.

Автор - RAN
Дата добавления - 11.02.2021 в 11:39
lebensvoll Дата: Четверг, 11.02.2021, 16:52 | Сообщение № 14
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
RAN,
Цитата
Мой макрос увеличивает дату не заданное количество лет. Но для всех записей на одно и то же число.

Я так понимаю вот тут:
[vba]
Код
sDate = Left(sDate, 9) & Val(Right(sDate, 1)) + Me.Range("F2")
[/vba]
или же тут:
[vba]
Код
xDate = InStrRev(cl.Value, " ") + 1
[/vba]
Скорее всего Вы правы
Цитата
Я же говорю, что вы не думаете.

и стараюсь не вникать а иду поверхностно по материалу да еще и
Цитата
все ваши думы остаются у вас

больше себя и окружающих запутываю :'(


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 11.02.2021, 16:53
 
Ответить
СообщениеRAN,
Цитата
Мой макрос увеличивает дату не заданное количество лет. Но для всех записей на одно и то же число.

Я так понимаю вот тут:
[vba]
Код
sDate = Left(sDate, 9) & Val(Right(sDate, 1)) + Me.Range("F2")
[/vba]
или же тут:
[vba]
Код
xDate = InStrRev(cl.Value, " ") + 1
[/vba]
Скорее всего Вы правы
Цитата
Я же говорю, что вы не думаете.

и стараюсь не вникать а иду поверхностно по материалу да еще и
Цитата
все ваши думы остаются у вас

больше себя и окружающих запутываю :'(

Автор - lebensvoll
Дата добавления - 11.02.2021 в 16:52
Kuzmich Дата: Четверг, 11.02.2021, 16:52 | Сообщение № 15
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
lebensvoll
Всегда ли следующая дата поверки будет через год ?
Мне кажется, что более информативна будет колонка, показывающая количество дней до очередной поверки.
И эту ячейку можно окрашивать различными цветами в зависимости от количество дней
 
Ответить
Сообщениеlebensvoll
Всегда ли следующая дата поверки будет через год ?
Мне кажется, что более информативна будет колонка, показывающая количество дней до очередной поверки.
И эту ячейку можно окрашивать различными цветами в зависимости от количество дней

Автор - Kuzmich
Дата добавления - 11.02.2021 в 16:52
lebensvoll Дата: Четверг, 11.02.2021, 17:00 | Сообщение № 16
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Kuzmich,
Цитата
Всегда ли следующая дата поверки будет через год ?

Нет не всегда
Я думал что завяжусь на ячейках напротив записи "КНТ протокол периодической аттестации №581-19 от 10.01.2019г."
Также думал и с датой Сегодня поступить. На момент составления (протокола) дата может быть не равна дате СЕГОДНЯ (а к примеру СЕГОДНЯ 11.02.2021 а протокол составляю к примеру 25.01.2021 (задним числом но сегодня) и вот именно эта дата 25.01.2021 и должна была быть в сравнении с "№581-19 от 10.01.2019г. + 1 год (или 2;3) = 10.01.2020;21;22"

Наглядный пример всей этой процедуры в Сообщение № 12 и приложенном файле (там Борода Александр когда то мне помог осуществить задуманное но там не макросы и условие только с датами из ячеек и окрашивание всей ячейки)...
А в данной теме работа с текстом вытягивание даты и окрашивание части текста по условию

То что именно такое нельзя осуществить формулами через УФ я уже понял проанализировав этот форум.


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Четверг, 11.02.2021, 17:11
 
Ответить
СообщениеKuzmich,
Цитата
Всегда ли следующая дата поверки будет через год ?

Нет не всегда
Я думал что завяжусь на ячейках напротив записи "КНТ протокол периодической аттестации №581-19 от 10.01.2019г."
Также думал и с датой Сегодня поступить. На момент составления (протокола) дата может быть не равна дате СЕГОДНЯ (а к примеру СЕГОДНЯ 11.02.2021 а протокол составляю к примеру 25.01.2021 (задним числом но сегодня) и вот именно эта дата 25.01.2021 и должна была быть в сравнении с "№581-19 от 10.01.2019г. + 1 год (или 2;3) = 10.01.2020;21;22"

Наглядный пример всей этой процедуры в Сообщение № 12 и приложенном файле (там Борода Александр когда то мне помог осуществить задуманное но там не макросы и условие только с датами из ячеек и окрашивание всей ячейки)...
А в данной теме работа с текстом вытягивание даты и окрашивание части текста по условию

То что именно такое нельзя осуществить формулами через УФ я уже понял проанализировав этот форум.

Автор - lebensvoll
Дата добавления - 11.02.2021 в 17:00
Kuzmich Дата: Четверг, 11.02.2021, 17:04 | Сообщение № 17
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Если дата поверки не всегда через год, то надо вводить еще одну колонку с периодичностью
 
Ответить
СообщениеЕсли дата поверки не всегда через год, то надо вводить еще одну колонку с периодичностью

Автор - Kuzmich
Дата добавления - 11.02.2021 в 17:04
lebensvoll Дата: Четверг, 11.02.2021, 17:07 | Сообщение № 18
Группа: Проверенные
Ранг: Старожил
Сообщений: 1002
Репутация: 30 ±
Замечаний: 0% ±

Excel 2010
Kuzmich, да я же не думал что вы и RAN, мне пропишите код с переменными и т.д. %) :'(
Я в обычном то режиме записи через Macro Recorder произвожу запись и то теряюсь и начинаю обращаться когда идет все так :'(
А тут еще и переменные + "Синтаксис регулярных выражений" :'( %) для меня вообще темный лес


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеKuzmich, да я же не думал что вы и RAN, мне пропишите код с переменными и т.д. %) :'(
Я в обычном то режиме записи через Macro Recorder произвожу запись и то теряюсь и начинаю обращаться когда идет все так :'(
А тут еще и переменные + "Синтаксис регулярных выражений" :'( %) для меня вообще темный лес

Автор - lebensvoll
Дата добавления - 11.02.2021 в 17:07
Kuzmich Дата: Четверг, 11.02.2021, 17:43 | Сообщение № 19
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Посмотрите приведенный пример.
Я думаю, не стоит запускать иакрос при каждом изменении на листе.
Можно это сделать на событие открытия книги.
К сообщению приложен файл: 10-46927-1_v2.xls (64.5 Kb)
 
Ответить
СообщениеПосмотрите приведенный пример.
Я думаю, не стоит запускать иакрос при каждом изменении на листе.
Можно это сделать на событие открытия книги.

Автор - Kuzmich
Дата добавления - 11.02.2021 в 17:43
RAN Дата: Четверг, 11.02.2021, 19:40 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
и стараюсь не вникать

Стесняюсь спросить, тогда какого ... вы размещаете свои темы в "вопросах по ...", а не в работе?
Платите бабки, и не вникайте.

PS сожалею о потраченном на вас времени.


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

Сообщение отредактировал RAN - Четверг, 11.02.2021, 20:29
 
Ответить
Сообщение
и стараюсь не вникать

Стесняюсь спросить, тогда какого ... вы размещаете свои темы в "вопросах по ...", а не в работе?
Платите бабки, и не вникайте.

PS сожалею о потраченном на вас времени.

Автор - RAN
Дата добавления - 11.02.2021 в 19:40
Мир MS Excel » Вопросы и решения » Вопросы по VBA » УФ макросом для части текста в ячейке и его выделения (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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