是啥导致此运行时错误 13“类型不匹配”?

Posted

技术标签:

【中文标题】是啥导致此运行时错误 13“类型不匹配”?【英文标题】:What is causing this Run-time Error 13 "Type Mis-Match"?是什么导致此运行时错误 13“类型不匹配”? 【发布时间】:2016-10-04 19:41:20 【问题描述】:

下面的代码根据哪些单元格包含“是”来增加一个变量。它一直有效,直到我使用自动填充将 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

【问题讨论】:

这是Worksheet_Change 过程的一部分吗? 嗯...我很少使用Select Case,但我以前从未见过它是这样构造的..(changedcell) 是什么?你的Case 在哪里?写Select Case 的意义不在于您不必编写一堆If Then Else 声明吗? An example of Select Case,微软要说什么about Select Case 请检查单元格中自动填充的内容;错误link 的解释指向单元格中的错误内容。 是的,这与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

建议阅读以下页面:

For Each...Next Statement,

Select Case Statement

【讨论】:

我会测试目标是否与 rIssues 范围相交,只是为了避免在更改任何单元格时循环。也就是说,我假设 OP 在 WorkSheet_Change 事件中有这个。还要确保 EnableEvents 返回 True。 @ScottCraner 我假设这是 Worksheet_Change 事件的一部分,还假设交叉点和所有其他相关部分都在那里并且工作正常,因为问题确认只有在案例中使用自动填充时才会失败选择,所以似乎所有其他部分(我们只是不知道它是什么)都被很好地覆盖了。感谢您的意见... EEM 解决了我的问题!另外,感谢斯科特的建议。 EnableEvents 在 sub 结束时返回 true。

以上是关于是啥导致此运行时错误 13“类型不匹配”?的主要内容,如果未能解决你的问题,请参考以下文章

运行时错误 13 类型不匹配,将数据从 Access 传输到 Excel

查找文件夹/子文件夹名称时 MS Access VBA 运行时错误“13”类型不匹配

在 Windows 机器上运行 Postgresql 11 时导致“更多无法识别...”错误的原因是啥?

打开金蝶kis专业版提示:运行时错误'13'类型不匹配是怎么回事?

使用ActiveSheet.Range时运行时错误13“类型不匹配”

关于输入语句格式化与变量定义类型不匹配导致结果错误