Я новичок здесь и относительно новичок в VBA, поэтому, пожалуйста, несите меня. Я оглянулся, чтобы ответить на это, но ничего не мог найти, поэтому прошу прощения, если об этом уже ответили в другом месте, и я не нашел его.Выделите несогласованные записи в одном динамическом столбце и настоящем msgbox для всего диапазона
Я хочу выполнить поиск по указанному столбцу динамической длины и заменить демографию на систему чисел (код замены ниже работает отлично, но если у вас есть предложения, связанные с эффективностью, обязательно!). Тогда я хочу, чтобы выделить любые записи, которые не соответствуют номерам, - это строки, в которых говорилось бы, например, «Менеджер» вместо «Босс» или что-то в этом роде, и появлялось окно с сообщением пользователь вручную закодирует в выделенных полях.
В настоящее время происходит то, что у меня есть условное форматирование для любых записей, которые не совпадают, поэтому они выделяются. Моя «для каждой ячейки» заполняет окно сообщения для каждой отдельной записи, которую он находит, но я просто хочу, чтобы в одном поле было поле для всего диапазона. Было бы лучше выделить несогласованные записи через VBA? Как? Как я могу это кодировать, чтобы предоставить только один ящик для всего диапазона?
Заранее благодарю за помощь!
Sub ReplaceRaterDemographicCodes()
'Find and replace demographics with their corresponding codes.
Columns("H:H").Select
With Selection
.Replace What:="Self", Replacement:="78"
.Replace What:="Boss", Replacement:="74"
.Replace What:="Boss 1", Replacement:="74"
.Replace What:="Peer", Replacement:="75"
.Replace What:="Direct Report", Replacement:="76"
.Replace What:="Customer", Replacement:="77"
.Replace What:="Other", Replacement:="79"
.Replace What:="Boss 2", Replacement:="72"
.Replace What:="Boss 3", Replacement:="73"
End With
For Each Cell In Range("H2:H" & Range("H" & Rows.Count).End(xlUp).Row).Select
If Not Cell.Value = 72 And Not Cell.Value = 73 And _
Not Cell.Value = 74 And Not Cell.Value = 75 And Not Cell.Value = 76 And _
Not Cell.Value = 77 And Not Cell.Value = 78 And Not Cell.Value = 79 And _
Not Cell.Value = "" Then
MsgBox ("There are uncommon demographics listed. Please modify as needed.")
End If
Next Cell
End Sub
Благодарим за быстрый ответ. Две вещи: 1) Я получаю ошибку компиляции, когда я пытаюсь «Dim showbox As Boolean = False», поэтому я попробовал две строки, один из которых был Dim showbox As Boolean », а затем« showbox = False ». Это правильно? 2) Я получив ошибку «Тип несоответствия», когда я использую ваш код, но он не открывает отладчик VBA. Идея, которую вы предлагаете, имеет смысл, но я не знаю, почему она не работает. – jfkenne
Простите, я просто обновил мой ответ. Я привык к vb.net вместо vba, поэтому я не уверен, что вызывает вашу ошибку. Мой обновленный ответ лучше, так как вы можете остановить цикл for, как только ваши критерии будут выполнены в первый раз. – jgridley
Aha! Я понял, что ошибка. '.Select' в конце' For Every' выбрасывал vba для цикла (я до сих пор не знаю, почему ...). Просто удалите это, и код отлично работает! 'Else MsgBox (« Все ясно! »)', чтобы убедиться, что все работает, и все выглядит великолепно. Спасибо за помощь = D! – jfkenne