Я делаю автоматизированный аудит этого типа в изобилии, поэтому я бы подошел к этому так;
Ваш «макрос аудита» - это, по сути, итератор с множеством проверок качества - это «имя» = «» и т. Д. Вы также можете запустить этот автоматический макрос.
- В одной строке данных каждый шаг консолидации
- После завершения консолидации.
Первый наиболее прост в использовании и работает следующим образом:
- После шага консолидации запустите «макрос аудита» в строке только что введенных данных.
- Если проблема обнаружена, запишите строку данных в отдельную вкладку, оставив столбец A пустым; не для вашей консолидации. В конце вашей консолидации выведите пользователю предупреждение, если в конце консолидации были обнаружены какие-либо строки проблем
- Пользователь skim читает данные на отдельной вкладке, ставит 1 в 'keep' в столбце A.
- Пользователь нажимает кнопку для запуска макроса, который добавляет строки с «1» против них к вашему полному набору данных (например, в конце, если порядок не имеет значения).
Точно так же вы можете подойти к этому, запустив аудит, когда консолидация будет полностью завершена; в этом случае вам нужно будет удалить или иным образом отслеживать строки, которые могут быть удалены, если пользователь решит не сохранять их.
Мне нравится этот подход, потому что он неблокирующий; Пользователь может оставить свой консолидатор для работы без надзора, а затем по своему усмотрению иметь дело с исключениями. Кроме того, вы можете написать / отредактировать столько тестов, сколько захотите, без существенной замены вашего консолидатора; затем вы можете также начать, например, подсчет количества каждой проблемы для каждого импорта и поместить его в отчет для постоянного улучшения ... есть варианты для расширения.
С точки зрения псевдокода, это итератор, полный блоков if-else, с одним флагом «есть проблема», который, если его значение равно 1, приводит к тому, что строка рассматривается как проблема;
For rowCount = startRow to endRow
' startRow and endRow correspond to lines of data you just imported
'Test 1
if (Some condition e.g. cells(rowCount ,2).value = "") then
issueFlag = 1
End if
'Test n...
if (Some condition e.g. cells(startRow,2).value = "") then
issueFlag = 1
End if
next rowCount
if issueFlag = 1 then
'CODE TO PASTE DATA
'Set some flag/variable which then triggers a Error Message at the end of the whole consolidation or audit
End if
Вы можете поставить Exit For в конце блока IF, поэтому, если активирован IssueFlag, вы немедленно выходите и пропускаете все дальнейшие тесты.