Что является причиной этой ошибки во время выполнения 13 «Несоответствие типа»?

#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 ? Разве не смысл писать a Select 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
  

Предлагаю прочитать следующие страницы:

Для каждого…Следующий оператор,

Оператор Select Case

Комментарии:

1. Я бы проверил, пересекается ли target с диапазоном rIssues, просто чтобы избежать зацикливания при изменении любой ячейки. То есть я предполагаю, что OP имеет это в событии Worksheet_Change. Также убедитесь, что значение EnableEvents возвращается к True.

2. @ScottCraner Я предполагаю, что это часть события Worksheet_Change, также предполагая, что пересечение и все другие связанные части присутствуют и работают нормально, поскольку вопрос подтверждает, что сбой происходит только при использовании автозаполнения в регистре выбора, поэтому кажется, что все остальные части (мы просто не знаем, как это)хорошо освещены. Спасибо за информацию…

3. EEM решил мою проблему! Кроме того, спасибо за совет, Скотт. EnableEvents возвращает значение true в конце подраздела.