错误13:类型不匹配与减法有关

时间:2013-12-10 02:49:20

标签: excel excel-vba vba

我正在写一个宏,我很难理解excel。宏检查某些单元是否相同,如果单元的减法小于103,则执行代码。当我尝试减去两个单元格并将其分配给变量时,我遇到了困难。任何指针?

Sub range1()
    Dim numResult As Integer

    For CHARS = 1 To 20000

        If Cells(CHARS, 1) = "" Then CHARS = 20000

        For n = 1 To 50
            If ([CELLS(CHARS, 1)] = [CELLS(CHARS + 1, 1)]) Then
               If ([CELLS(CHARS, 4)] = [CELLS(CHARS + 1, 4)]) Then
                  numResult = Evaluate([CELLS(CHARS + 1, 2)] & "-" & [CELLS(CHARS, 3)]) '//ERROR
                  If (numResult < 103) Then
                     Cells(CHARS + 1, 3).Select
                     Selection.Cut Destination:=Cells(CHARS, 3)
                     Rows("(CHARS + 1):(CHARS + 1)").Select
                     Selection.Delete Shift:=xlUp
                  End If
               End If
            Else
                Exit For
            End If
         Next n

    Next CHARS
End Sub

1 个答案:

答案 0 :(得分:0)

有很多方法可以改进代码,但最重要的是如果

 numResult = Evaluate([CELLS(CHARS + 1, 2)] & "-" & [CELLS(CHARS, 3)])

抛出错误Type mismatch,然后无法减去您减去的内容 - 或者无法将它们分配给Integer。很可能其中一个单元格包含文本,或者什么也没有。

我建议更改行

Dim numResult As Integer

Dim numResult

这样,“任何结果”都可以分配给变量,你可能能够弄清楚发生了什么。

编辑如果End If会让事情变得更好,那么您在理解If声明的结构时会遇到问题。

x = 3
If (1 = 1) Then x = 4
   MsgBox "hello"

导致x = 4,并显示消息“hello”。但

x = 3
If (1 = 0) Then x = 4
   MsgBox "goodbye"

导致x = 3,并且“再见”。换句话说 - 单独的缩进不会导致If继续到下一行。为此你需要:

If (1 = 0) Then
  x = 4
  MsgBox "goodbye"
Else
  MsgBox "hello"
End If

所以 - 当你Block If之后没有任何东西时,你创建一个Then - 然后你需要一个End If。否则,它只是Then执行后的下一个语句。

这有帮助吗?

一个想法:当你到达一个空白单元格时将CHARS设置为20000,然后执行下一个代码块,你实际上会尝试评估(可能){{1} }(空白减去空白)不能放在- ...但我猜测你的文件内容,我必须承认。