![]() |
Проверка на правильность написанных данных
Всем привет. Можете помочь с макросом, который будет проверять каждую ячейку столбца и в том случае, если в тексте ячейки присутствует ошибка в проставлении скобок, останавливать работу макроса и выводить сообщение, в каком месте листа макрос обнаружил ошибку. Например, запись «Текст(текст)» будет правильно, а такая – «Текст)текст(» или «((( )) () ))» будут неправильными и для них следует вывести сообщение об ошибке.
|
1. В тексте или в формуле?
2. А такая: «(())(())»? 3. Образец документа/рабочей книги на «поиграться» в студию! Invincible, вот примерная болванка кода, рассчитана на один тип скобок, функция проверки согласованности скобок возвращает булево значение: Код:
Option Explicit Цитата:
Цитата:
|
Вложений: 1
Цитата:
Цитата:
Цитата:
|
Вложений: 1
Цитата:
Цитата:
Примерно такой код: Скрытый текст
Код:
Option Explicit Все найденные ячейки с ошибками выделяются, и активной становится ячейка с первой найденной ошибкой (внутри выделения удобно перебирать ячейки клавишей «Tab»). Прилагаю и саму рабочую книгу с макросом и кнопкой: Файл 142120. |
Iska, Спасибо, буду пробовать.
|
Invincible, я там упростил код немного. Убедитесь, что Вы забрали именно исправленный (хотя работать будет и первый вариант).
|
Iska, А можете добавить, чтобы макрос работал при переносе данных в другой столбец/лист?
|
Invincible, можете и сами. Вот здесь:
Код:
With ThisWorkbook.Worksheets.Item("Лист1") Код:
For Each objRange In Intersect(.UsedRange, .Columns.Item("H")) Основной вопрос — как найти в Рабочей книге данные, которые требуется обрабатывать? Как, например, определить потребный лист? Самое простое и правильное — использовать активный рабочий лист, вместо указания конкретного. Но тогда нам нужно как-то исключить из возможной обработки те листы, на которых никак не может быть потребных данных. Тот же вопрос касается и местоположения потребных данных — как их найти на Рабочем листе, как определить их точное местоположение? Вот, Вы пишете просто «столбец», но по сути же это может быть неверным. Может присутствовать заголовок таблицы, шапка таблицы/заголовки столбцов (причём, в несколько строк), промежуточные данные, подвал/итоги таблицы, подписи и т.п. элементы. Как? Можно, скажем, зная структуру таблицы и или/содержимое шапки таблицы/заголовков столбцов, задаться некими правилами и от этого танцевать. Что скажете? |
Iska, Можно сделать, чтобы обрабатывались только данные в которых присутствуют скобки "()"?
Я имел в виду чтобы написали данные в столбец "A" проверили их макросом, потом перенесли их в столбец "С" и макрос также среагировал как и в первом случае, затем перенесли на другой лист в любой столбец и результат работы макроса оставался тем же. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
А можно тогда искомый столбец == активный столбец? |
Цитата:
|
Цитата:
|
Вложений: 1
Цитата:
Попробуйте так: Файл 142208 (листы диаграммы, диалога были добавлены намеренно для иллюстрации поведения, никакой значимой ценности они не несут). |
Цитата:
|
Цитата:
|
Цитата:
|
Поиск в этом случае осуществляется в диапазоне, представляющем собой пересечение (Intersect()) Используемого диапазона (.UsedRange) активного Рабочего листа (.ActiveSheet) и столбца (.Columns.Item()), в котором находится активная ячейка (Selection.Column). В целом определяется вот здесь:
Код:
With .ActiveSheet ' На активном Рабочем листе |
Iska, Но если выделена одна ячейка а поиск осуществляется по всему столбцу?
|
Iska, Можно еще последнее попросить, чтобы выводилось сообщение с адресом где обнаружилось ошибка. К примеру находится ошибка в ячейке A2, после нахождения ошибки выводится MsgBox с сообщением "Обнаружена ошибка в ячейке A2", потом например ошибка в ячейке A10, выводится еще один MsgBox с сообщением "Обнаружена ошибка в ячейке A10", и в самом конце уже MsgBox с сообщением "Всего найдено 2 ошибки".
|
Цитата:
|
Цитата:
Я же написал, что внутри выделения, которым помечаются ошибки, надо использовать клавишу Tab (или Enter при редактировании), но не клавиши управления курсором. Вот у нас нашлись ошибки, вывелось сообшение об их общем числе и выделились ячейки с ошибками, активной стала ячейка с первой найденной ошибкой. Нажимаете F2, исправляете ошибку, нажимаете Tab или Enter, переходя тем самым к следующей в выделении ячейке с ошибкой. Опять F2, исправление, Tab/Enter, F2, исправление, Tab/Enter и т.д. |
Цитата:
Цитата:
|
Цитата:
Вам непонятен принцип построения пересечения используемого диапазона со столбцом? Или само понятие используемого диапазона? Что вызывает сомнение/неуверенность в понимании? |
Цитата:
|
Цитата:
Скрытый текст
![]() |
Время: 22:32. |
Время: 22:32.
© OSzone.net 2001-