以下代码将按照我想要的方式正确格式化我的模板。但是,如果模板为空,并且用户单击工作表上的“准备上传”按钮,我将收到“溢出错误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
调试指向以下行作为问题:
rowNumber = .Cells(2, 1).End(xlDown).End(xlDown).Row + 1
谢谢
瑞安
最佳答案
由于VBA中的Integer
是一个16位带符号数字(最大值32767),因此您将产生溢出。无论使用什么版本的excel,您至少要有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
这是因为您试图选择一个不存在的范围(行1048577)(因此类型不匹配)。您需要添加一行代码来解决此情况。首先检查空白工作表,或者检查行> 1048576。
最简单的操作是添加一行以检查以下内容:
If rowNumber <= 1048576 Then
.Rows(rowNumber & ":" & .Rows.Count).Clear
End If