【问题标题】:VB Excel 2010 Run-time error '13': Type MismatchVB Excel 2010 运行时错误“13”:类型不匹配
【发布时间】:2014-05-30 11:53:40
【问题描述】:

我要做的就是让一个单元格显示其他两个单元格之间的百分比增加/减少。当其中有数值时,该代码工作正常,但在按下“重置”按钮(将单元格值设置为“-”)后,即使我在代码中使用了“-”场景,它也不会工作:

Private Sub PerChange(ByVal burn1 As Range, burn2 As Range, change As Range)

If burn1.Value And burn2.Value = "-" Then
    change.Value = "-"
Else
    change.Value = (burn1.Value / burn2.Value) - 1
End If

End Sub

这是发生错误的粗线,即使两者的值都是“-”

我也尝试将粗线换成:

**If IsNumeric(burn1.value and burn2.value) = False**

尽管 IsNumeric 的全部意义在于检查非数字类型,但它仍然在这一行出现 TYPE 不匹配而停止!!

当我把头发扯掉时请指教......

【问题讨论】:

  • 不应该是burn1.Value = "-" And burn2.Value = "-"吗? If IsNumeric(burn1.value and burn2.value) = False 也是有效的,但绝对不是你想要的。试试If Not IsNumeric(burn1.value) and Not IsNumeric(burn2.value)
  • 感谢您的帮助。我可以问一下吗,你说我的陈述是有效的,但不是我想要的。这是为什么?是不是因为 IsNumeric() 只能取一个值?
  • 问题是IsNumeric(burn1.value and burn2.value) 表示您想知道表达式burn1.value and burn2.value 是否为数值。对变量值使用And 运算符容易出错且不是很直观,而且绝对不是您想要实现的目标。例如,如果其中一个单元格值是无法转换为数字的字符串(例如“abc”),则会出现错误。或者,如果您的单元格为空,则 Empty and Empty 实际上将返回零,这是一个数值。所以是的,在你可以预测的表达式上使用IsNumeric,比如单个变量
  • 好吧,这是有道理的。再次感谢!

标签: excel runtime-error vba


【解决方案1】:

这将起作用:

Private Sub PerChange(ByVal burn1 As Range, burn2 As Range, change As Range)
    If burn1.Text = "-" And burn2.Text = "-" Then
        change.Value = "-"
    Else
        change.Value = (burn1.Value / burn2.Value) - 1
    End If
End Sub

测试:

Sub MAIN()
    Call PerChange(Range("A1"), Range("A2"), Range("B1"))
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    相关资源
    最近更新 更多