溢出错误6与以下Excel 2010 VBA

下面的代码将按我想要的方式正确地格式化我的模板。 但是,如果模板为空,并且用户点击工作表上的“准备上传”button,则将收到“溢出错误”6.是否有任何方法可以删除导致此错误的内容?

Sub PrepForUpload() Dim cel As Range, rng As Range Set rng = Range("A2", Range("A65536").End(xlUp)) For Each cel In rng If cel.Value = "" Then If cel.Offset(, 2).Value = "" Then cel.EntireRow.Delete End If End If Next cel Dim rowNumber As Integer With Sheets("Initiatives") If Len(.Cells(2, 1)) = 0 Then rowNumber = .Cells(2, 1).End(xlDown).End(xlDown).Row + 1 Else: rowNumber = .Cells(2, 1).End(xlDown).Row + 1 End If .Rows(rowNumber & ":" & .Rows.Count).Clear End With End Sub 

debugging指向以下行作为问题:

 rowNumber = .Cells(2, 1).End(xlDown).End(xlDown).Row + 1 

谢谢

瑞安

由于VBA中的Integer是16位有符号数(最大值为32767),所以会发生溢出。 无论使用哪种版本的Excel,至less有65535行,如果您使用的是XLSX文件格式,最有可能更多。 您需要将rowNumber更改为Long

而且你还必须围绕空白工作表scenerio编码。 当你打电话给这条线时:

 rowNumber = .Cells(2, 1).End(xlDown).End(xlDown).Row + 1 

并且工作表是空的.End(xlDown)将返回工作表中最后一个可能的行,在Excel 2010(和Excel 2007)的情况下为1048576.一旦将rowNumber更改为Long您将不再获得溢出错误,但是你会遇到这样的问题:

 .Rows(rowNumber & ":" & .Rows.Count).Clear 

这是因为您正在尝试select不存在的范围(行1​​048577)(因此types不匹配)。 您需要添加一行代码来解决此scheme。 首先检查空白工作表,或检查行> 1048576。

最简单的事情就是添加一行来检查:

 If rowNumber <= 1048576 Then .Rows(rowNumber & ":" & .Rows.Count).Clear End If 

rowNumber更改为Long然后添加1&使用CLng来消除“types不匹配”错误。

 rowNumber = CLng(.Cells(2, 1).End(xlDown).End(xlDown).Row + 1) 

要么

 rowNumber = .Cells(2, 1).End(xlDown).End(xlDown).Row + 1& 

你能告诉我们你的数据在A列中的样子吗? 你也可以尝试这个代码,在试图获取行号之前testing行数

 Dim cel As Range, rng As Range If Application.WorksheetFunction.CountA(Columns(1)) <= 1 Then MsgBox "No lines" Exit Sub End If Set rng = Range("A2", Cells(Rows.Count, 1).End(xlUp)) For Each cel In rng If Len(cel.Value) = 0 Then If Len(cel.Offset(, 2).Value) = 0 Then cel.EntireRow.Delete End If Next cel Dim rowNumber As Long With Sheets("Initiatives") If Application.WorksheetFunction.CountA(.Columns(1)) <= 1 Then MsgBox "No lines in sheet Initiative" Exit Sub End If If Len(.Cells(2, 1)) = 0 Then rowNumber = .Cells(2, 1).End(xlDown).End(xlDown).Row + 1 Else: rowNumber = .Cells(2, 1).End(xlDown).Row + 1 End If .Rows(rowNumber & ":" & .Rows.Count).Clear End With