以下代码将按照我想要的方式正确格式化我的模板。但是,如果模板为空,并且用户单击工作表上的“准备上传”按钮,我将收到“溢出错误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


这是因为您试图选择一个不存在的范围(行1​​048577)(因此类型不匹配)。您需要添加一行代码来解决此情况。首先检查空白工作表,或者检查行> 1048576。

最简单的操作是添加一行以检查以下内容:

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

07-24 09:47
查看更多