#excel #runtime-error #autofill #vba
#excel #ошибка во время выполнения #автозаполнение #vba
Вопрос:
Приведенный ниже код увеличивает переменную, в зависимости от того, какие ячейки содержат «Да». Это работает только до тех пор, пока я не использую автозаполнение, чтобы установить значение для любой из ячеек в F13: F59 на «Да». Когда я ввожу слово «Да» вручную, ошибка во время выполнения не возникает. Однако автозаполнение, похоже, вызывает проблему.
Select Case (changedcell)
'Issues Mgmt
Case Range("F15"), Range("F19"), Range("F23"), Range("F27"), Range("F30"), Range("F39"), Range("F42"), Range("F45"), Range("F50"), Range("F53"), Range("F54") 'Issues
If Range("F15").Value = "Yes" Then
issues = issues 1
End If
If Range("F19").Value = "Yes" Then
issues = issues 1
End If
If Range("F23").Value = "Yes" Then
issues = issues 1
End If
If Range("F27").Value = "Yes" Then
issues = issues 1
End If
If Range("F30").Value = "Yes" Then
issues = issues 1
End If
If Range("F39").Value = "Yes" Then
issues = issues 1
End If
If Range("F42").Value = "Yes" Then
issues = issues 1
End If
If Range("F45").Value = "Yes" Then
issues = issues 1
End If
If Range("F50").Value = "Yes" Then
issues = issues 1
End If
If Range("F53").Value = "Yes" Then
issues = issues 1
End If
If Range("F54").Value = "Yes" Then
issues = issues 1
End If
If issues > 1 Then
Application.EnableEvents = False
MsgBox "Issues Management has already been selected under another old solution category.", vbCritical, "Duplicate Use Case Selected"
Range(target.Address).Value = ""
End If
End Select
В этой первой части кода возникает ошибка. Есть мысли?
Case Range("F15"), Range("F19"), Range("F23"), Range("F27"), Range("F30"), Range("F39"), Range("F42"), Range("F45"), Range("F50"), Range("F53"), Range("F54") 'Issues
Комментарии:
1. Является ли это частью
Worksheet_Change
процедуры?2. Гм … я не
Select Case
очень много использую, но я никогда раньше не видел, чтобы она была построена таким образом.. Что такое(changedcell)
? Где вашCase
? Разве не смысл писать aSelect Case
, чтобы вам не приходилось делать кучуIf Then Else
утверждений?3. Пример
Select Case
того, что Microsoft может сказать оSelect Case
4. Пожалуйста, проверьте, что автозаполнение заполняет ячейки; объяснение ссылки на ошибку указывает на неправильное содержимое в ячейках.
5. Да, это полная противоположность тому, что
Select Case
предназначено для. Я не могу сказать наверняка, но я подозреваю, что ошибка возникает из-за самого оператора Case. Он ожидает логическое выражение и получает ряд диапазонов.
Ответ №1:
Попробуйте это:
Dim rIssues As Range
Dim rCll As Range
Set rIssues = Range("F15,F19,F23,F27,F30,F39,F42,F45,F50,F53,F54")
For Each rCll In rIssues
If rCll.Value = "Yes" Then Issues = 1 Issues
Next
If Issues > 1 Then
Application.EnableEvents = False
MsgBox "Issues Management has already been selected under another old solution category.", _
vbCritical, "Duplicate Use Case Selected"
Range(Target.Address).Value = ""
End If
Предлагаю прочитать следующие страницы:
Комментарии:
1. Я бы проверил, пересекается ли target с диапазоном rIssues, просто чтобы избежать зацикливания при изменении любой ячейки. То есть я предполагаю, что OP имеет это в событии Worksheet_Change. Также убедитесь, что значение EnableEvents возвращается к True.
2. @ScottCraner Я предполагаю, что это часть события Worksheet_Change, также предполагая, что пересечение и все другие связанные части присутствуют и работают нормально, поскольку вопрос подтверждает, что сбой происходит только при использовании автозаполнения в регистре выбора, поэтому кажется, что все остальные части (мы просто не знаем, как это)хорошо освещены. Спасибо за информацию…
3. EEM решил мою проблему! Кроме того, спасибо за совет, Скотт. EnableEvents возвращает значение true в конце подраздела.