I tried to solve this overflow in my excel sheet and still not able to solve it. I knew that my data is really a lot (more than 32767 rows). please take a look a my code and hel
Change all your Integer
declarations to Long
Dim Ctr As Long
you've been already been given the answer
you may also consider the following refcatoring of your code:
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
where
Option Explicit
would have spotted that Cutstr = ""
typo (it should have been Curstr = ""
)
no need for
Dim CtrS As String
and all its subsequent initialization and use
since Ctr
variable of Long
type will be implicitly cast to a String
when combined to another String
variable through the &
operator
no need for
LstStr = ""
Cutstr = ""
since String
variables are always initialized to an empty one at their declaration
no need for
EOF = False
since Boolean
variables are always initialized to False
at their declaration
While Not EOF
moved to the Loop
part of the Do - Loop
block
since EOF
first value is always False
change
CurStr = Range("A" & CtrS).Value & "-" & _
Range("B" & CtrS).Value & "-" & _
...
Range("K" & CtrS).Value
to
CurStr = Join(Application.Transpose(Application.Transpose(Range("A" & Ctr).Resize(, 11).Value)), "-")
where you take advantage of the Resize() property of Range
object and the Join() function
the double Application.Transpose()
is there to return a one dimensional array since:
Range("A" & Ctr).Resize(, 11).Value
would return a two dimensional array of 1 row and 11 columns
Application.Transpose(Range("A" & Ctr).Resize(, 11).Value))
would return a 2 dimensional array of 11 rows and 1 columns
Application.Transpose(Application.Transpose(Range("A" & Ctr).Resize(, 11).Value)))
would finally return a 1 dimensional array of 11 elements
Range("A" & Ctr & ":L" & Ctr & ",N" & Ctr & ":O" & Ctr)
takes advantage of one of possible Range() arguments specifications, specifically
Range("firstRangeAddress, secondRangeAddress"")
where that comma between the two addresses acts as a Union()
operator