Уважаемые эксперты, доброго времени суток! Прошу помочь в следующем вопросе: Имеется таблица. Количество и заголовки столбцов должны соответствовать шаблону (последовательность не важна). Соответствие должно быть по ячейке и по регистру. С помощью макрорекордера я начал запись макроса, но к сожалению не могу исправить код как нужно. Прошу скорректировать код так , чтобы если значение, прописанное в макросе не находится, выводилось сообщение с этим значением, и макрос останавливался. Excel 2016, 64 bit.
Пробовал способ " On Error GoTo метка с сообщением" не помог, у меня не получается остановить макрос, он все равно выполняется полностью.
Sub Глaбол()
Dim a()
Dim j&
'-----------
a = Sheets("Шапка").UsedRange.Rows(21).Value
With CreateObject("Scripting.Dictionary")
For j = 1 To UBound(a, 2)
If a(1, j) <> "" Then .Item(a(1, j)) = ""
Next
a = Sheets("Шапка").UsedRange.Rows(1).Value
For j = 1 To UBound(a, 2)
If a(1, j) <> "" Then
If Not .Exists(a(1, j)) Then
MsgBox "Нет заголовка """ & a(1, j) & """"
Exit Sub
End If
End If
Next
End With
Beep
MsgBox "Всё на месте"
End Sub
kalbasiatka, этот макрос не вывел сообщения что нет значения b. В примере я указал каким бы хотел видеть результат работы макроса. Не могли бы вы подсказать команду , подставив которую , в случае ненахождения макросом искомого значения, выводилось сообщение что это значение не найдено и выполнение макроса останавливалось? С уважением, Lari.
Ігор Гончаренко, доброго времени суток! Спасибо за ответ. Немного поэкспериментировал, получился следующий код Тут пример для позиции "b" (16-я строка кода), для остальных столбцов я также повторю. А нельзя записать приведенный мной вариант проще,чтобы , если ошибка, выводим сообщение "нет b" и завершаем макрос? С уважением, Lari.
Lary, 1) Зачем Вы используете замену в макросе? Вам же нужно просто найти, и если не находится - вывести сообщение Имхо, вместо метода replace нужно использовать find 2) Чтобы не повторять участки кода отдельно для А,В,С - нужно прописывать такой код в цикл
Sasha0601, Добрый день! Большое спасибо за помощь, и не хотел бы показаться неблагодарным, но у меня 150 файлов для проверки, мне легче 1 раз прописать в макросе нужные названия столбцов, чем 150 раз копировать в соседний лист для образца. К тому же Ваш код не чувствителен к регистру символа. К сожалению мой код , который я здесь привел, даже при всех правильных столбцах, все равно теперь останавливает макрос. Поэтому вопрос остается открытым, какой нужно добавить код чтобы ы случае необнаружения проверяемого значения, которое прописано в макросе, макрос останавливался, и выводил сообщение что такое-то значение не найдено. В таком случае я сам скорректирую и еще раз запущу проверку столбцов. С уважением, Lari.
Lari, тогда вместо шаблонного листа используем массив и цикл по массиву. У функции Find есть параметр MatchCase – чувствительность к регистру. Посмотрите вложение
Sasha0601, Наличие проверяет, но нельзя ли те значения, которые проверены и совпадают, окрашивать в какой-нибудь цвет. Т.к. в таблице 50 столбцов, последовательность не всегда совпадает, и искать где именно некорректно заполненный столбец будет сложнее, чем если корректные будут окрашены. С уважением, Lari.