运行时错误“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
及其后续的初始化和使用
因为
Long
types的Ctr
variables在通过&
运算符组合到另一个String
variables时将被隐式转换为String
-
不需要
LstStr = "" Cutstr = ""
因为
String
variables在声明时总是被初始化为空的 -
不需要
EOF = False
因为
Boolean
variables在声明时总是被初始化为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()
运算符