Откройте редлактор 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-адресов, оставляя другие ссылки нетронутым.
Ух, гениально... я по другому пытался, но чет походу некоторых тонкостей не знаю пока, выдавало странные результаты, то кого то не хватало, то вообще без результата. Спасибо Вам еще раз
Знать бы еще откуда Вы "черпали" данные знания, книги, англоязычные профи иль еще откуда то, что бы сразу, без "воды" погрузиться в Excel`евский "омут"
Добрый человек, Ваш пример работает классно, но чет тяжко мне пока даются формулы с массивами с применением ИНДЕКС + ПОИСК + критерии.
Можете помочь еще разок, или же пояснить, как сделать так, чтобы ваша формула в определённом имени "спис", работала когда в правой таблице начнут появляться новые строки/данные о руководителях которые могут подписывать док-ты?
Вручную расширить диапазон, эт конечно можно, а есть вариант как то автоматом это делать? Иль тут уже без VBA не обойтись?
Jack Famous, в том то и дело, что сначала посмотрел, а потом только написал.
У меня зависимость выпадающего списка должна быть от диапазона 0-50000 руб - список тех у кого есть документ на получение ТМЦ на такую сумму, от 200000 руб и выше - список рук-лей уже другой...
А то что в статье, показывает как на основании категории(точной, без диапазона) показать зависимую под категорию.
Цитата
написал: поправил границы.
Вы конечно меня извините, но чет "въехать не могу" где список выпадающий в ячейках руководителей? Вручную не пойдет заполнение. Меня то как раз интересует формула написанная в:
Возможно я плохо объяснил, прошу прощения, должно быть примерно так как на скрине:
Используем Проверка данных -> Тип данных -> Список Список должен формироваться по условию.
Подписант документа, в нашем случае доверенности, должен сам иметь доверенность на подписание документа определенной суммы. Если по условию он не проходит, то и в списке не указывается.
Помогите пожалуйста, с Проверкой данных - Списки... нужно создать список по условию. Условие заключается в том, что нужно вывести список Рук-лей у которых есть доверенность на определенную сумму, то есть если у рук-ля есть доверенность на подписание док-тов на сумму не более 50к, то подписать выдачу доверенности на сумму свыше 50к он не может и выводится в списке руководителей он не будет.
Тестовый пример приложен к Теме.
Есть ограничение, Office 2007. В более свежих редакциях есть ФИЛЬТР и СОРТ, там все понятно как реализовать.
написал: А ничего, что у Вас теперь вместо суммы отфильтрованных ячеек формула выдает сумму всех ячеек. Попробуйте использовать СТРОКУ ИТОГОВ
Чего то не понял про какую сумму всех ячеек идет речь... Если добавить СТРОКУ ИТОГОВ как вы показали на скриншоте, то добавится строка внизу таблицы, вот только зачем она там? нельзя суммировать кол-во отпущенных разных позиций.... В моем столбце справа, выдается сумма потраченных материалов по месяцам за год ) Да и проблема изначально была в добавлении пустрой строки из-за ПРОМЕЖУТОЧНЫЕ.ИТОГИ. На данный момент решение найдено.
Короче, нашел в чем проблема (методом перебора)... Функция Промежуточные.Итоги, что то очень коряво работает с умной таблицей, поменял последний столбец на обычную Сумму, перевыставил фильтр и вуаля, заработало и не добавлят лишних строк...
Добрый день. Кто нибудь сталкивался с таким чудом?:
В приложенном файле, три листа InOutCMV - Лист с движением (Прием-Отпуск) ОборотыСклада - ну тут понятно ProductDirectory - Тут собственно перечень материалов и колонка с остатками на данный момент
Весь трабл происходит на Листе ОборотыСклада Берем фильтр за Февраль и убираем все строки с 0 и получаем список с пустой строкой вконце, если очитстить фильтр и повторить, то строк пустыуже будет 2 штуки, если еще повторим, то уже 3 стороки и так далее
Пробовал в Microsoft Office 2007 и 2013, там и там фильтр странно работает, дома же в офисе 2021 фильтр работает нормально
Подскажите пожалуйста, как сделать так что бы фильтр отрабатывал как нужно и не показывал пустых строк....
Добрый день форумчане... Пытаюсь по маленьку осмыслить VBA в excel по методу практического применения , но нужна помощь спецов, так как немного не понятны некоторые вещи.
Файлик прикрепил, для примера (Необходимо чтобы было следующее):
На листе "ФормаВвода", вводится требование, затем по нажатию кнопки "Ввод" копируем данные требования в таблицу на лист "Учет Приход_Расход".
Лист "ФормаВвода", справа от ввода сделал временную таблицу (tblTempTransfer) с которой копипастим в основную таблицу учета....
Кол-во наименований товаров может варьироваться от 1 до 9, их необходимо вставить в конец основной таблицы учета Приход_Расход (без пустых строк).
Пробовал находить последнию используемую строку в tblTempTransfer и копипастить, но чет ошибок понаделал прям "мама не горюй =)"
Да и по хорошему, как бы обойтись без временной таблички на форме ввода и сразу копипастить в Приход_Расход?
Потом есть вопрос: запросы к данным через Worksheets это конечно хорошо, но не практично в смысле того, что имя Листа может и измениться, видел что можно попробовать использовать ListObjects, обратиться по имени таблицы - как бы это грамотно сделать? реализовать на примере файла получится?
buchlotnik написал: ну можно и оставить, наверное, только как отличить два документа одного типа в одну дату? если номера нужны в хронологии, можно так:
тут да... вопрос про отличие спорный... ) Ваша реализация интересная, я уж было подумывал о БД в Excel`е (Создание базы данных в Excel)...
спасибо... оригинально... изучу ваш вариант... жаль вот ток сортировку по дате нужно будет категорически исключить, а то присвоится документу уже не тот номер
Добрый день, форумчане, прошу помощи, так как сам еще с массивами в excel`e не особо опытный.
Помогите пожалуйста с данной темой: Необходимо при заполнении Даты составления и Типа документа создать УНД (Уникальный Номер Документа).
Разбор УНД: Примером возьмем данный номер 49с/0720-001
49 - Номер подразделения
с - Первая строчная буква названия Типа документа
/ - разделение для читаемости
07 - месяц документа
20- год документа
-разделение для читаемости
001 - номер документа
Проблема у меня состоит вот в чем, ладно если бы все доки шли по порядку, но вот ведь есть такая необходимость в текущем месяце зарегистрировать документ задним числом (предыдущем месяцем) и тут начинаются траблы ))) у меня проверка УНД идет по предыдущему номеру и при совпадении месяца с годом к номеру идет +1 (вновых условиях я не учитывал букву Типа документа - хотя и ее нужно учитывать), а тут получается нужно прошерстить весь столбец на нахождение одинакового начала, примером 49с/0720, найти в столбце УНДмассив данных с удовлетворяющим условием, выбрать номер документа, пример: 017, значение которого явлется максимальным и сделать +1.
V, формула, это конечно хорошо ) спс, но вот ток дело в том, что процесс нужно автоматизировать, дабы не создавать лишний столбец, а потом его удалять. Интересует возможность реализации макросом...
Есть таблица с колонкой Номенклатурных номеров A2-A327, формат их записи такой:
07012400000000000000
07010118000000000000
07010000111000000000
07011512000000000000
07010000100000000000
Как в номенклатурный номер после последней цифры >0 добавить символ "_" (нижнего подчеркивания) и автоматом удалить последний "0"? Макрос нужно чтобы работал от A2-A327.
Направьте на путь истинный))
Пример столбца, над которым нужно произвести сиё действие прикладываю.
Сергей, не подскажите, а есть ли более оптимизированный вариант позволяющий выбрать с листа БД.01.02.2019 отсутствующие позиции при сравнении с листом Опись...
Юрий М, либо если есть другой способ, другой вид формулы, более оптимальный, позволяющий выбрать с листа БД.01.02.2019 отсутствующие позиции при сравнении с листом Опись, но учитывая что в листе Опись Н/н укорочены, а в листе БД.01.02.2019 они 20ти значные. + бонусом, чтобы не было совпадений при нахождении таких номеров как 07212612 и 07212612101, каждая позиция уникальна.
Сергей,если коротко, данная "корявая" формула, уж как смог, ссори не ПРОФИ, делает сравнение ОписиФактическогоНаличияТаблицы с ТаблицейБД и делает список отсутствующих позиций на складе. Номенклат.номера 20ти значные.
Дело вот в чем, есть вот такие формулы в первом варианте все работает гуд, а во втором ругается на "Ошибка в формул"... Подскажите плиз, что я упустил?