Подскажите можно ли сделать предупреждение (сообщение) на попытку всей строчке/столбцу присвоить цвет или границы. Что-то типа
Цитата
"Вы пытаетесь изменить цвет или границы для всей строки. Пожалуйста выберите только ячейки из таблицы"
Ещё хорошо чтобы код умел отменять только что совершенное форматирование строки\столбца. То есть кто-то выделяет целиком всю строку/столбец и закрашивает её цветом. Тут вылазит сообщение что делать так нельзя и отменяет закрашивание. Событие на этапе выделения всей строки делать не надо. Всё же строки могут захотеть выделить чтобы удалить или вставить другие строки.
Для чего надо - вычитал что таким образом можно уменьшить файл. Сейчас файл почистил копированием всей таблицы в новый файл. Так закрашенными остались не все строки и столбцы, а только нужные диапазоны. Кроме того удалось таким копированием удалить пустые ячейки без данных, но которые занимали место (если нажимать ctrl+end выделялась ячейка очень далеко от нужной таблицы). Файл уменьшился в размере. Но на будущее хотелось бы бороться хотя бы с этим моментом с помощью макроса.
Сам пока не постиг обработку событий.
Подскажите можно ли сделать предупреждение (сообщение) на попытку всей строчке/столбцу присвоить цвет или границы. Что-то типа
Цитата
"Вы пытаетесь изменить цвет или границы для всей строки. Пожалуйста выберите только ячейки из таблицы"
Ещё хорошо чтобы код умел отменять только что совершенное форматирование строки\столбца. То есть кто-то выделяет целиком всю строку/столбец и закрашивает её цветом. Тут вылазит сообщение что делать так нельзя и отменяет закрашивание. Событие на этапе выделения всей строки делать не надо. Всё же строки могут захотеть выделить чтобы удалить или вставить другие строки.
Для чего надо - вычитал что таким образом можно уменьшить файл. Сейчас файл почистил копированием всей таблицы в новый файл. Так закрашенными остались не все строки и столбцы, а только нужные диапазоны. Кроме того удалось таким копированием удалить пустые ячейки без данных, но которые занимали место (если нажимать ctrl+end выделялась ячейка очень далеко от нужной таблицы). Файл уменьшился в размере. Но на будущее хотелось бы бороться хотя бы с этим моментом с помощью макроса.
Хм. Чисто теоретически можно при переходах на странице отслеживать наличие покрашенных столбцов или строк. Только лекарство будет злее болезни :D [vba]
Код
For i = 1 To Rows.Count
[/vba] Дальше рассказывать?
Хм. Чисто теоретически можно при переходах на странице отслеживать наличие покрашенных столбцов или строк. Только лекарство будет злее болезни :D [vba]
Событий, отслеживающих форматирование, в Excel нет
Ну, попробуем отследить тем что есть, например так:
[vba]
Код
' В модуль листа Dim oldRange As Range Dim newRange As Range Dim newFormat As Variant Dim oldFormat As Variant
Private Sub Worksheet_Activate() Set oldRange = ActiveCell Set newRange = ActiveCell oldFormat = oldRange.Interior.Color newFormat = newRange.Interior.Color End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo error0
Set oldRange = newRange oldFormat = newFormat Set newRange = Target newFormat = newRange.Interior.Color
If oldFormat <> oldRange.Interior.Color Then Application.Undo MsgBox "нельзя менять цвет ячеек! " End If
Событий, отслеживающих форматирование, в Excel нет
Ну, попробуем отследить тем что есть, например так:
[vba]
Код
' В модуль листа Dim oldRange As Range Dim newRange As Range Dim newFormat As Variant Dim oldFormat As Variant
Private Sub Worksheet_Activate() Set oldRange = ActiveCell Set newRange = ActiveCell oldFormat = oldRange.Interior.Color newFormat = newRange.Interior.Color End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range) On Error GoTo error0
Set oldRange = newRange oldFormat = newFormat Set newRange = Target newFormat = newRange.Interior.Color
If oldFormat <> oldRange.Interior.Color Then Application.Undo MsgBox "нельзя менять цвет ячеек! " End If
С защитой листа игрался перед тем как тему создать. Не помогает. Защищаются ведь все ячейки (столбцы) справа от таблицы. И тогда нельзя удалять строки. А закрашивать всё равно можно. А надо наоборот. Строка может лишняя создаться или не нужная. Сейчас ещё думаем как те строчки которые заполнены всеми участниками полностью, оптравлять в архив (в другой файл). Вобщем удалять строки надо.
Ну, попробуем отследить тем что есть, например так:
Почти то что надо! Только в таком варинте вообще ничего не закрасить))) А мы всё же некоторые ячейки закрашиваем. Например если что-то изменилось в заказе или заказ отменился - закрашиваем красным. Ну и всё в таком духе.
С защитой листа игрался перед тем как тему создать. Не помогает. Защищаются ведь все ячейки (столбцы) справа от таблицы. И тогда нельзя удалять строки. А закрашивать всё равно можно. А надо наоборот. Строка может лишняя создаться или не нужная. Сейчас ещё думаем как те строчки которые заполнены всеми участниками полностью, оптравлять в архив (в другой файл). Вобщем удалять строки надо.
Ну, попробуем отследить тем что есть, например так:
Почти то что надо! Только в таком варинте вообще ничего не закрасить))) А мы всё же некоторые ячейки закрашиваем. Например если что-то изменилось в заказе или заказ отменился - закрашиваем красным. Ну и всё в таком духе.fairylive
Ну да, именно что почти, один баг есть, не соображу как исключить. если в выделенном диапазоне ячейка залита чёрным, то и диапазон весь чёрным покрасить можно. чёт сходу не пойму как исключить это.
1.Моя задача была, - отследить событие листа - ("изменение цвета заливки"), подручными средствами. Получилось,( пока за исключением чёрного цвета). 2.Теперь вы на это событие свои условия повесить можете, а не просто "Undo" и "Msg", как у меня в примере. Например список исключений ввести.
Ну да, именно что почти, один баг есть, не соображу как исключить. если в выделенном диапазоне ячейка залита чёрным, то и диапазон весь чёрным покрасить можно. чёт сходу не пойму как исключить это.
1.Моя задача была, - отследить событие листа - ("изменение цвета заливки"), подручными средствами. Получилось,( пока за исключением чёрного цвета). 2.Теперь вы на это событие свои условия повесить можете, а не просто "Undo" и "Msg", как у меня в примере. Например список исключений ввести.al-Ex
Сообщение отредактировал al-Ex - Понедельник, 28.03.2016, 00:28
Я выложил пример. Вы проверяли? Закрашивается? Строки не удаляются?
Разумеется смотрел. Нельзя закрасить целиком строчку. И вообще никаких ячеек на листе. А мне надо только чтоб строка не закрашивалась а всё остальное в моей таблице чтоб можно было редактировать. Заливать заливкой в том числе. Вобщем защита листа это не совсем то что надо.
Я выложил пример. Вы проверяли? Закрашивается? Строки не удаляются?
Разумеется смотрел. Нельзя закрасить целиком строчку. И вообще никаких ячеек на листе. А мне надо только чтоб строка не закрашивалась а всё остальное в моей таблице чтоб можно было редактировать. Заливать заливкой в том числе. Вобщем защита листа это не совсем то что надо.fairylive
2.Теперь вы на это событие свои условия повесить можете, а не просто "Undo" и "Msg", как у меня в примере. Например список исключений ввести.
Условие по идее такое - надо позволить закрашивать красным и жёлтым. Но не позволять закрашивать всю строчку. По идее последнее может означать не позволять закрашивать некий пустой диапазон справа от моей таблицы. Если кто-то закрашивают всю строчку то этот диапазон закрашивается и тогда ему говорят что так делать нельзя. А если он красит только строчку выделяя её в таблице то надо такое закрашивание разрешить. Причём только красный и жёлтый цвет. Для меня пока это будет сложно. Но если никто не напишет код попробую вернуться к этой проблеме когда более менее начну разбираться в VBA.
2.Теперь вы на это событие свои условия повесить можете, а не просто "Undo" и "Msg", как у меня в примере. Например список исключений ввести.
Условие по идее такое - надо позволить закрашивать красным и жёлтым. Но не позволять закрашивать всю строчку. По идее последнее может означать не позволять закрашивать некий пустой диапазон справа от моей таблицы. Если кто-то закрашивают всю строчку то этот диапазон закрашивается и тогда ему говорят что так делать нельзя. А если он красит только строчку выделяя её в таблице то надо такое закрашивание разрешить. Причём только красный и жёлтый цвет. Для меня пока это будет сложно. Но если никто не напишет код попробую вернуться к этой проблеме когда более менее начну разбираться в VBA.fairylive
К сообщению приложен файл: Format_Event2.xlsm(24Kb)
Интересное решение на счёт видимости отдельных столбцов. Как это реализовано? Что происходит с остальными столбцами если закрашивать всю строчку?
Прикладываю файл. Обычная таблица. Ничего сверхъестественного. Но в общем доступе разбухает и тормозит. Поэтому пытаюсь уменьшить его размер всеми доступными способами.
PS. Сам файл почистил довольно кардинально. Перерыл пол интернета. Советов много. Помогло копирование таблицы в новую книгу. При этом исчезли пустые ячейки, пустые объекты, скрытые имена. Уменьшил журнал изменений до 7 дней (копия файла на сервере делается ежедневно начиная с начала года). Сейчас всё летает. Но чую скоро он опять распухнет и затормозит.
К сообщению приложен файл: Format_Event2.xlsm(24Kb)
Интересное решение на счёт видимости отдельных столбцов. Как это реализовано? Что происходит с остальными столбцами если закрашивать всю строчку?
Прикладываю файл. Обычная таблица. Ничего сверхъестественного. Но в общем доступе разбухает и тормозит. Поэтому пытаюсь уменьшить его размер всеми доступными способами.
PS. Сам файл почистил довольно кардинально. Перерыл пол интернета. Советов много. Помогло копирование таблицы в новую книгу. При этом исчезли пустые ячейки, пустые объекты, скрытые имена. Уменьшил журнал изменений до 7 дней (копия файла на сервере делается ежедневно начиная с начала года). Сейчас всё летает. Но чую скоро он опять распухнет и затормозит.fairylive