Problema en macro de excel

Tengo esta macro pero al ejecutarla me dice error 1004 y me señala esta línea cual es el problema en negrilla

Sub Repetid()
col = "TK"
'
Application.ScreenUpdating = False
Application.StatusBar = False
c = Columns(col).Column
Range(Cells(1, c), Cells(1, c + 2)).EntireColumn.ClearContents
cuenta = Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 23).Count
m = 1
For Each n In Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 23)
Application.StatusBar = "Paso 1, procesando celda: " & m & " de: " & cuenta
Set b = Columns(c).Find(n.Value, lookat:=xlWhole)
If Not b Is Nothing Then
Cells(b.Row, c + 1) = Cells(b.Row, c + 1) + 1
Cells(b.Row, c + 2) = Cells(b.Row, c + 2) & ", " & n.Address(False, False)
Else
u = Range(col & Rows.Count).End(xlUp).Row + 1
Cells(u, c) = n.Value
Cells(u, c + 1) = 1
Cells(u, c + 2) = n.Address(False, False)
End If
m = m + 1
Next
m = 1
For i = u To 1 Step -1
Application.StatusBar = "Paso 2, procesando celda: " & m & " de: " & u
If Cells(i, c + 1) = 1 Then
Range(Cells(i, c), Cells(i, c + 2)).Delete Shift:=xlUp
End If
m = m + 1
Next
'
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Range(Cells(1, c), Cells(u, c)), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange Range(Cells(1, c), Cells(u, c + 2))
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Application.ScreenUpdating = True
Application.StatusBar = False
MsgBox "Fin"
End Sub

1 Respuesta

Respuesta
2

.17.04.17

Buenas tardes, Jhon

Lo primero que deberías controlar es si tu archivo de MS Excel es del tipo xls o xlsm.

Recuerda que el primero de ellos, como las versiones originales, sólo tienen hasta la columna IV, mientras que tu macro está pidiendo considerar un rango que vá hasta la columna SZ.

Controla entonces si tu archivo tiene esa columna en el rango. Si no, deberías ajustar el rango A1:SZ217 en la rutina o convertir el archivo a la versión xlsm para que amplíe la cantidad de columnas / filas. Ojo, no basta con "guardar como" sino que hay que entrar por la opción de "Archivo" "Convertir" (previamente guarda una copia de esta versión)

Luego de ese control, y de persistir el error, habría que revisar qué elementos incluyes en cada celda o si tienes celdas ocultas o combinadas o la hoja protegida, pero -en principio- la instrucción que genera el error cuenta todas las celdas del rango indicado que contengan dato y no sean fórmulas.

cuenta = Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 23).Count

El argumento "23" indica que considere constantes como números, textos, valores lógicos y errores

Cada uno de esos conceptos tiene un valor individual para su identificación:

XlErrors -> 16

xlLogical -> 4
xlNumbers -> 1
xlTextValues -> 2

y, la suma de ellos, dá 23.

Pero puede ocurrir que alguno de los tipos que estés buscando no tenga celda alguna y eso dará un error

Revisado el contenido de tu hoja, probaría con reemplazando aquella línea con las siguientes para poder determinar qué conteo es el que está arrojando el error. Si todo estuviera OK, la suma de estas cuatro lineas deberían dar el mismo resultado que aquella:

cuenta = Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 1).Count + cuenta 'cuenta numeros
cuenta = Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 2).Count + cuenta 'cuenta textos
cuenta = Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 4).Count + cuenta 'cuenta valores lógicos
cuenta = Range("A1:SZ217").SpecialCells(xlCellTypeConstants, 16).Count + cuenta 'cuenta errores

Sí con ello descubres qué provoca el error, puedes eliminar ese control restando su valor.

Por ejemplo, si el problema estuviese en el conteo de valores lógicos (código 4), podrías probar con esta línea:

cuenta = Range("A1:SZ217"). SpecialCells(xlCellTypeConstants, 23 - 4). Count

Espero que puedes resolver tu problema con estas aproximaciones a tu problema.

Un abrazo
Fer

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas