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

时间:2016-11-08 06:34:32

标签: excel vba excel-vba

我试图在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

2 个答案:

答案 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()运算符