使用If语句,会产生runtime-13类型不匹配错误

时间:2011-05-08 13:54:11

标签: vba excel-vba runtime-error type-mismatch excel

Private Sub CommandButton1_Click() ''Dim rCell As Range
Dim i As Long
Dim rNext As Range

'loop through the cells in column A of the source sheet
For Each rCell In Sheet4.Range("A3:U25")
'loop as many times as the value in column U of the source sheet
    For i = 1 To rCell.Offset(0, 23).Value
        'find the next empty cell to write to in the dest sheet
        Set rNext = Sheet12.Cells(Sheet12.Rows.Count, 1).End(xlUp).Offset(1, 0)
        'copy A and B from source to the dest sheet
        rCell.Resize(1, 23).Copy
        rNext.Resize(1, 1).PasteSpecial (xlPasteValues)
    Next i
Next rCell
End Sub
  1. 我在第For i = 1 To rCell.Offset(0, 23).Value行遇到了运行时-13类型不匹配。 当它出错时,我点击结束,它工作正常。不想点击结束。
  2. 在我的表单中,我使用If语句=IF(E4>0,1,"")来生成所需的1。如果我删除If语句并手动将1放在适当的位置,那么它可以正常工作。

2 个答案:

答案 0 :(得分:2)

发生错误是因为FOR LOOP中的结束范围不是LONG的类型。

如果我正确读取您的第二个要点,我认为您的IF声明已关闭。而不是= IF(E4> 0,1,“”),IF的FALSE标准应该是数字的(例如= IF(E4> 0,1, 2 )。

您可以通过将以下语句置于问题FOR LOOP上来进行验证:

Debug.Assert IsNumeric(rCell.Offset(0, 23).Value)

这将停止执行代码,您可以将其放在即时窗口中,以查看值是什么以及相关单元格的位置:

? rCell.Offset(0, 23).Value
? rCell.Offset(0, 23).Column
? rCell.Offset(0, 23).Row

答案 1 :(得分:0)

好的,我解决了问题:

=IF(E4>0,1,"")必须为=IF(E4>0,1,0)

无法查找空白,必须是1或0.或数字值,如您所说。 很简单。谢谢您的帮助。甚至都没看到。