我正在写一个宏,我很难理解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
答案 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} }(空白减去空白)不能放在-
...但我猜测你的文件内容,我必须承认。