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

Вход

Регистрация

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

 

= Мир MS Excel/VBA скрипт блокирует условное форматирование - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » VBA скрипт блокирует условное форматирование (Макросы/Sub)
VBA скрипт блокирует условное форматирование
KIMVSR Дата: Вторник, 07.07.2015, 14:56 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Здравствуйте,

У меня такая проблема. В этой теме добрые люди мне помогли сделать один VBA скриптик.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Count > 1 Then Exit Sub
       If Not Intersect(Target, Range("A1:G13")) Is Nothing Then
           Application.EnableEvents = False
           If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then
               MsgBox "Only 'DATE' or 'X' value are allowed to input!", vbCritical
               Target.ClearContents
           Else
               Target = Format(Target, "dd.mm.yyyy")
           End If
           Application.EnableEvents = True
           Range("A1:G13").HorizontalAlignment = xlRight
       End If
End Sub
[/vba]
Обнаружил, что с данным макросом перестаёт работать условное форматирование (conditional formatting).

Хотел сделать такое правило:



Т.е. если событие было больше, чем год назад, система должна выделять её красным цветом.
Но этого не происходит. Причём текст вводится красным цветом, а потом резко превращается в чёрный.

Без макроса эта функция у меня работает без проблем.

Может кто-то смог бы помочь разобраться? pray
К сообщению приложен файл: 4483066.xlsx (8.7 Kb)


Сообщение отредактировал KIMVSR - Вторник, 07.07.2015, 14:57
 
Ответить
СообщениеЗдравствуйте,

У меня такая проблема. В этой теме добрые люди мне помогли сделать один VBA скриптик.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
       If Target.Count > 1 Then Exit Sub
       If Not Intersect(Target, Range("A1:G13")) Is Nothing Then
           Application.EnableEvents = False
           If Target.Value <> "" And Target.Value <> "x" And Not IsDate(Target.Value) Then
               MsgBox "Only 'DATE' or 'X' value are allowed to input!", vbCritical
               Target.ClearContents
           Else
               Target = Format(Target, "dd.mm.yyyy")
           End If
           Application.EnableEvents = True
           Range("A1:G13").HorizontalAlignment = xlRight
       End If
End Sub
[/vba]
Обнаружил, что с данным макросом перестаёт работать условное форматирование (conditional formatting).

Хотел сделать такое правило:



Т.е. если событие было больше, чем год назад, система должна выделять её красным цветом.
Но этого не происходит. Причём текст вводится красным цветом, а потом резко превращается в чёрный.

Без макроса эта функция у меня работает без проблем.

Может кто-то смог бы помочь разобраться? pray

Автор - KIMVSR
Дата добавления - 07.07.2015 в 14:56
miver Дата: Вторник, 07.07.2015, 15:15 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
KIMVSR, В макросе замени строчку
[vba]
Код
Target = Format(Target, "dd.mm.yyyy")
[/vba]
на
[vba]
Код
Target.Value = DateValue(Format(Target, "dd.mm.yyyy"))
[/vba]
и будет тебе счастье ;)
 
Ответить
СообщениеKIMVSR, В макросе замени строчку
[vba]
Код
Target = Format(Target, "dd.mm.yyyy")
[/vba]
на
[vba]
Код
Target.Value = DateValue(Format(Target, "dd.mm.yyyy"))
[/vba]
и будет тебе счастье ;)

Автор - miver
Дата добавления - 07.07.2015 в 15:15
Manyasha Дата: Вторник, 07.07.2015, 15:18 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
KIMVSR, перепишите строчку [vba]
Код
Target = Format(Target, "dd.mm.yyyy")
[/vba] в [vba]
Код
Target = CDate(Format(Target, "dd.mm.yyyy"))
[/vba]


ЯД: 410013299366744 WM: R193491431804
 
Ответить
СообщениеKIMVSR, перепишите строчку [vba]
Код
Target = Format(Target, "dd.mm.yyyy")
[/vba] в [vba]
Код
Target = CDate(Format(Target, "dd.mm.yyyy"))
[/vba]

Автор - Manyasha
Дата добавления - 07.07.2015 в 15:18
miver Дата: Вторник, 07.07.2015, 15:22 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
KIMVSR, И что бы ошибки не было
[vba]
Код

         ElseIf IsDate(Target.Value) Then
             Target.Value = DateValue(Format(Target, "dd.mm.yyyy"))
         End If
[/vba]
 
Ответить
СообщениеKIMVSR, И что бы ошибки не было
[vba]
Код

         ElseIf IsDate(Target.Value) Then
             Target.Value = DateValue(Format(Target, "dd.mm.yyyy"))
         End If
[/vba]

Автор - miver
Дата добавления - 07.07.2015 в 15:22
KIMVSR Дата: Вторник, 07.07.2015, 15:31 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 118
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
miver, Manyasha, блииин, ребят, просто фантастика! yahoo
Огромное вам спасибо! Плюсую!
 
Ответить
Сообщениеmiver, Manyasha, блииин, ребят, просто фантастика! yahoo
Огромное вам спасибо! Плюсую!

Автор - KIMVSR
Дата добавления - 07.07.2015 в 15:31
KSV Дата: Вторник, 07.07.2015, 20:57 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
        Range("A1:G13").HorizontalAlignment = xlRight

KIMVSR, а зачем Вы при каждом изменении любой ячейки из диапазона A1:G13 снова и снова устанавливаете формат ячеек всего диапазона? Это достаточно сделать всего один раз, и можно руками. (см. вложенный файл)

И что бы ошибки не было

а чтобы не дублировать одни и те же проверки, проще так:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count > 1 Then Exit Sub
     If Not Intersect(Target, Range("A1:G13")) Is Nothing Then
         If Target.Value <> "" And Target.Value <> "x" Then
             Application.EnableEvents = False
             If IsDate(Target.Value) Then
                 'Target = Format(Target, "dd.mm.yyyy")      ' так в ячейку будет помещена дата в текстовом формате, поэтому у вас УФ и не срабатывало
                 Target = CDate(Replace(Target, ",", "."))   ' чтобы была честная дата, а не текст (как я Вам сразу и предлагал)
                 'Target.HorizontalAlignment = xlRight       ' это не понадобится, если применить формат ячеек, который я предлагал Вам ранее (см. формат ячеек)
             Else
                 MsgBox "Only date or 'x' value is allowed to input!", vbCritical
                 Target.ClearContents
                 Target.Select
             End If
             Application.EnableEvents = True
         End If
     End If
End Sub
[/vba]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщение
        Range("A1:G13").HorizontalAlignment = xlRight

KIMVSR, а зачем Вы при каждом изменении любой ячейки из диапазона A1:G13 снова и снова устанавливаете формат ячеек всего диапазона? Это достаточно сделать всего один раз, и можно руками. (см. вложенный файл)

И что бы ошибки не было

а чтобы не дублировать одни и те же проверки, проще так:[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
     If Target.Count > 1 Then Exit Sub
     If Not Intersect(Target, Range("A1:G13")) Is Nothing Then
         If Target.Value <> "" And Target.Value <> "x" Then
             Application.EnableEvents = False
             If IsDate(Target.Value) Then
                 'Target = Format(Target, "dd.mm.yyyy")      ' так в ячейку будет помещена дата в текстовом формате, поэтому у вас УФ и не срабатывало
                 Target = CDate(Replace(Target, ",", "."))   ' чтобы была честная дата, а не текст (как я Вам сразу и предлагал)
                 'Target.HorizontalAlignment = xlRight       ' это не понадобится, если применить формат ячеек, который я предлагал Вам ранее (см. формат ячеек)
             Else
                 MsgBox "Only date or 'x' value is allowed to input!", vbCritical
                 Target.ClearContents
                 Target.Select
             End If
             Application.EnableEvents = True
         End If
     End If
End Sub
[/vba]

Автор - KSV
Дата добавления - 07.07.2015 в 20:57
Мир MS Excel » Вопросы и решения » Вопросы по VBA » VBA скрипт блокирует условное форматирование (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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