Макрос, который автоматически форматирует ячейку при вводе значения. (преобразовать макрос в макрос события?)

У меня есть электронная таблица, в которой я бы хотел, чтобы диапазон A: A автоматически форматировался, чтобы символы отображались красным, а цифры оставались одного цвета. Следующий макрос, кажется, работает нормально, но мне нужно запускать его вручную каждый раз, когда я меняю значение в ячейке:

Sub Red_text()

Dim i As Integer
Dim MyString As String

MyString = ActiveCell.Value

For i = 1 To Len(MyString)
    If IsNumeric(Mid(MyString, i, 1)) = False Then
        ActiveCell.Characters(i, 1).Font.Color = RGB(247, 66, 66)
    End If
Next i

End Sub

Поэтому в основном мне нужно изменить его на макрос события, который будет переформатировать текущую ячейку каждый раз, когда она редактируется. И ограничьте это поведение диапазоном A:A.

Любая помощь будет принята с благодарностью!


person user2835648    schedule 01.10.2013    source источник


Ответы (1)


Сначала небольшое изменение в вашем макросе:

Sub Red_text(r As Range)

Dim i As Integer
Dim MyString As String

MyString = r.Value

For i = 1 To Len(MyString)
    If IsNumeric(Mid(MyString, i, 1)) = False Then
        r.Characters(i, 1).Font.Color = RGB(247, 66, 66)
    End If
Next i
End Sub

а также включить следующий макрос события в область кода рабочего листа:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A As Range
    Set A = Range("A:A")
    If Intersect(A, Target) Is Nothing Then Exit Sub
    Application.EnableEvents = False
        Call Red_text(Target)
    Application.EnableEvents = True
End Sub

Макрос события обнаруживает записи в столбце A, а затем применяет форматирование.

ИЗМЕНИТЬ №1:

Макрос события должен измениться, чтобы обрабатывать более одной ячейки одновременно. Удалите исходный макрос события и используйте это:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim A As Range, rBIG As Range, r As Range
    Set A = Range("A:A")
    Set rBIG = Intersect(A, Target)
    If rBIG Is Nothing Then Exit Sub
    Application.EnableEvents = False
        For Each r In rBIG
            Call Red_text(r)
        Next r
    Application.EnableEvents = True
End Sub
person Gary's Student    schedule 01.10.2013
comment
Оно работает!! Единственная проблема в том, что макрос вылетает, когда я пытаюсь очистить две или более ячеек. Легко ли это исправить? - person user2835648; 01.10.2013
comment
Это потрясающе! Большое спасибо! - person user2835648; 01.10.2013