我试图在excel表中解决这个溢出问题,但仍然无法解决。 我知道我的数据真的很多(超过32767行)。 请查看我的代码,并帮助我就此提出建议。 感谢。
这是删除宏
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
当我尝试调试时,错误指向此处:
Ctr = Ctr + 1
答案 0 :(得分:1)
将您的所有Integer
声明更改为Long
Dim Ctr As Long
答案 1 :(得分:0)
你已经得到了答案
您也可以考虑以下代码的反映:
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
及其后续的所有初始化和使用
因为Ctr
类型的Long
变量在通过String
运算符
String
变量时将被隐式强制转换为&
不需要
LstStr = ""
Cutstr = ""
因为String
变量总是在声明
不需要
EOF = False
因为Boolean
变量在声明时始终初始化为False
While Not EOF
已移至Loop
块
Do - 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列的 2 维数组
Application.Transpose(Range("A" & Ctr).Resize(, 11).Value))
将返回11行和1列的二维数组
Application.Transpose(Application.Transpose(Range("A" & Ctr).Resize(, 11).Value)))
最终将返回11个元素的一维数组
Range("A" & Ctr & ":L" & Ctr & ",N" & Ctr & ":O" & Ctr)
利用了一个可能的Range()参数规范,特别是
Range("firstRangeAddress, secondRangeAddress"")
两个地址之间的逗号充当Union()
运算符