Откройте редлактор VBA, в дереве проекта найдите "ThisWorkbook/ЭтаКнига" (это объект всей книги), дважды щелкните на него и вставьте этот код в окно кода:
| Код |
|---|
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim cell As Range
Dim emailPattern As String
Dim regEx As Object
Dim isEmail As Boolean
' Регулярное выражение для определения email
emailPattern = "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"
' Инициализация регулярного выражения
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = emailPattern
regEx.IgnoreCase = True
regEx.Global = True
Application.EnableEvents = False
For Each cell In Target
If Not cell.Hyperlinks.Count = 0 Then
' Проверяем, является ли текст ячейки email-адресом
isEmail = regEx.Test(cell.Value)
If isEmail Then
' Удаляем гиперссылку, но сохраняем текст
cell.Hyperlinks.Delete
End If
End If
Next cell
Application.EnableEvents = True
End Sub
|
Если вы хотите обработать также существующие данные во всей книге, добавьте этот макрос в обычный модуль:
| Код |
|---|
Sub RemoveEmailHyperlinksFromAllSheets()
Dim ws As Worksheet
Dim cell As Range
Dim emailPattern As String
Dim regEx As Object
Dim isEmail As Boolean
' Регулярное выражение для email
emailPattern = "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b"
Set regEx = CreateObject("VBScript.RegExp")
regEx.Pattern = emailPattern
regEx.IgnoreCase = True
regEx.Global = True
Application.ScreenUpdating = False
For Each ws In ThisWorkbook.Worksheets
For Each cell In ws.UsedRange
If Not cell.Hyperlinks.Count = 0 Then
isEmail = regEx.Test(cell.Value)
If isEmail Then
cell.Hyperlinks.Delete
End If
End If
Next cell
Next ws
Application.ScreenUpdating = True
MsgBox "Обработка завершена!", vbInformation
End Sub
|
Как использовать дополнительный макрос:
Нажмите Alt + F8
Выберите "RemoveEmailHyperlinksFromAllSheets"
Нажмите "Выполнить"
Этот макрос пройдет по всем листам и удалит гиперссылки с email-адресов, оставляя другие ссылки нетронутым.
Изменено: - 19.05.2025 10:09:29