#vba
#vba
Вопрос:
Коды добавлены в модуль класса ‘CAppEventHandler’
Option Explicit
Private WithEvents App As Application
Private Sub Class_Initialize()
Set App = Application
End Sub
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Call CheckSpelling1
End Sub
Коды добавлены в модуль «ThisWorkbook» personal.xlsb
Option Explicit
Private OurEventHandler As CAppEventHandler
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Set OurEventHandler = New CAppEventHandler
End Sub
Код для проверки орфографии в ячейке
Sub CheckSpelling1(r As Range)
Dim rng As Range
Dim ar() As String
Dim i As Long
Dim j As Long
With Application.SpellingOptions
.IgnoreCaps = True
.IgnoreFileNames = True
.IgnoreMixedDigits = True
End With
For Each rng In r
If Not rng.HasFormula And VarType(rng.Value) = vbString Then
ar = Split(Replace(rng.Value, Chr(160), " "), " ")
j = 1
rng.Font.ColorIndex = xlColorIndexAutomatic
For i = 0 To UBound(ar)
If Not Application.CheckSpelling(Word:=ar(i)) Then
rng.Characters(j, Len(ar(i))).Font.ColorIndex = 3
End If
j = j 1 Len(ar(i))
Next i
End If
Next rng
End Sub
Я проверил много сообщений о том, как обрабатывать события, предназначенные для всех книг. Но, поскольку я новичок в VBA, не могу заставить его работать. Спасибо за вашу помощь.
Ответ №1:
Пожалуйста, попробуйте инициализировать класс в Open
событии:
1.
Private Sub Workbook_Open()
Set OurEventHandler = New CAppEventHandler
End Sub
Будучи скрытой рабочей книгой, Workbook_SheetChange
событие никогда не будет запущено.
В любом случае, если Personal.xlsb
он уже открыт, вы можете / должны вручную запустить событие, вместо того, чтобы закрывать и повторно открывать его. Класс должен быть инициализирован, чтобы можно было использовать созданное событие.
Только после этого SheetChange
событие всех открытых книг вызовет событие, определенное в классе.
- Затем
CheckSpelling1
необходимо вызвать sub, используя егоRange
аргумент ():
Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
CheckSpelling1 Target
End Sub
Комментарии:
1. @Surendra Mishra: Рад, что смог помочь!