运行时错误“6”溢出:Microsoft Excel VBA

我试图解决在我的Excel表中溢出,仍然无法解决它。 我知道我的数据真的很多(超过32767行)。 请看看我的代码,并帮助我build议。 谢谢。

这是删除macros

Sub Remove() ' ' Remove Macro ' Dim Ctr As Integer Dim CtrS As String Dim EOF As Boolean Dim LstStr As String Dim CurStr As String Ctr = 8 LstStr = "" Cutstr = "" EOF = False Do While Not EOF CtrS = CStr(Ctr) CurStr = Range("A" & CtrS).Value & "-" & _ Range("B" & CtrS).Value & "-" & _ Range("C" & CtrS).Value & "-" & _ Range("D" & CtrS).Value & "-" & _ Range("E" & CtrS).Value & "-" & _ Range("F" & CtrS).Value & "-" & _ Range("G" & CtrS).Value & "-" & _ Range("H" & CtrS).Value & "-" & _ Range("I" & CtrS).Value & "-" & _ Range("J" & CtrS).Value & "-" & _ Range("K" & CtrS).Value If CurStr <> "----------" Then If CurStr = LstStr Then 'Clear content A to N, except L Range("A" & CtrS, "L" & CtrS).ClearContents Range("N" & CtrS, "O" & CtrS).ClearContents Else LstStr = CurStr End If Else EOF = True End If Ctr = Ctr + 1 Loop ' End Sub 

当我试图debugging时,错误点在这里:

 Ctr = Ctr + 1 

将所有的Integer声明更改为Long

 Dim Ctr As Long 

你已经得到了答案

你也可以考虑下面你的代码的refcatoring:

 Option Explicit Sub Remove() ' ' Remove Macro ' Dim Ctr As Long Dim EOF As Boolean Dim LstStr As String Dim CurStr As String Ctr = 8 Do CurStr = Join(Application.Transpose(Application.Transpose(Range("A" & Ctr).Resize(, 11).Value)), "-") If CurStr <> "----------" Then If CurStr = LstStr Then 'Clear content A to N, except L Range("A" & Ctr & ":L" & Ctr & ",N" & Ctr & ":O" & Ctr).ClearContents Else LstStr = CurStr End If Else EOF = True End If Ctr = Ctr + 1 Loop While Not EOF End Sub 

哪里

  • Option Explicit

    会发现Cutstr = ""错字(应该是Curstr = ""

  • 不需要

     Dim CtrS As String 

    及其后续的初始化和使用

    因为Longtypes的Ctrvariables在通过&运算符组合到另一个Stringvariables时将被隐式转换为String

  • 不需要

     LstStr = "" Cutstr = "" 

    因为Stringvariables在声明时总是被初始化为空的

  • 不需要

     EOF = False 

    因为Booleanvariables在声明时总是被初始化为False

  • While Not EOF

    移到了Do - Loop块的Loop部分

    因为EOF第一个值总是False

  • 更改

     CurStr = Range("A" & CtrS).Value & "-" & _ Range("B" & CtrS).Value & "-" & _ ... Range("K" & CtrS).Value 

     CurStr = Join(Application.Transpose(Application.Transpose(Range("A" & Ctr).Resize(, 11).Value)), "-") 

    您可以利用Range对象的Resize()属性和Join()函数

    双重Application.Transpose()在那里返回一维数组,因为:

    • Range("A" & Ctr).Resize(, 11).Value

      将返回1行11列的二维数组

    • Application.Transpose(Range("A" & Ctr).Resize(, 11).Value))

      会返回11行1列的二维数组

    • Application.Transpose(Application.Transpose(Range("A" & Ctr).Resize(, 11).Value)))

      最终会返回11个元素的1维数组

  • Range("A" & Ctr & ":L" & Ctr & ",N" & Ctr & ":O" & Ctr)

    利用可能的Range()参数规范之一

     Range("firstRangeAddress, secondRangeAddress"") 

    这两个地址之间的逗号作为Union()运算符