Вопрос про макрос

Автор Посетитель, 31 мая 2023, 19:19

Посетитель

Возник вопрос, на работе нужно написать макрос с таким условием, чтобы текст в ячейке в которую заполнялась "формула" становился определенным цветом автоматически, а "константы" были черные (то есть их в условие вписывать не надо).
P.s условное форматирование не подойдет

Администратор

Как тестировать макрос. Перед открытием файла, щёлкните по нему правой кнопкой мыши - Свойства - поставьте галочку "Разблокировать".
После открытия файла разрешите запуск макросов.
Сейчас макрос реагирует только на ячейку A1 (в коде макроса указан адрес A1).
В ячейку A1 записывайте формулу или константу и будет изменяться закраска текста в этой ячейке.

Посетитель

Запускаю файл, все разрешил, но макрос не работает, вместо формулы ввожу константу, цвет красный.
Как прописать на весь лист этот макрос а не только на ячейку?

Администратор

Вот я записал в ячейку A1 константу, текст стал чёрным.
Не знаю, почему у вас не работает. Предположу, что вы не разрешили макросы в книге.

Цитата:
Как прописать на весь лист этот макрос а не только на ячейку?

Сначала надо разобраться, почему у вас имеющийся макрос не работает. Потом можно обсудить этот вопрос.

Посетитель

Да. действительно в самой книге не был разрешен доступ. С Вашим файлом теперь работает, как перенести на мой и сделать на весь лист?

Посетитель

("A1:XFD1048576") прописываю это, не работает что то

Посетитель

я уже все синтаксические формы перепробовал, наверное не понимаю, как макрос считывает диапазон

Администратор

Макрос нужно поместить в модуль листа, на котором должен срабатывать макрос. На скриншоте показано, в каком модуле сейчас находится макрос.
И у своего файла сделайте формат xlsb или xlsm, чтобы в файле могли находиться макросы. Формат xlsb более быстрый при работе с большим количеством данных.

Чтобы макрос срабатывал на всём листе, используйте этот макрос:

Макрос
Private Sub Worksheet_Change(ByVal Target As Range)
   
    ' Если изменения произошли в нескольких ячейках, то ничего не делаем.
    If Target.Cells.CountLarge = 1 Then
    ElseIf Target.Cells(1, 1).MergeArea.Address = Target.Address Then
    Else
        Exit Sub
    End If
   
    ' Если в ячейке формула.
    If Target.HasFormula Then
        Target.Font.Color = 255
    ' Если в ячейке константа или пусто.
    Else
        Target.Font.Color = 0
    End If
   
End Sub
[свернуть]

Посетитель