Error macro para copiar

Hola Elsamatilde!

Me habías pasado un código de macro para copiar ciertas columnas de las filas que yo seleccionaba. El problema es que sólo me deja copiar hasta 8 filas y no mas.

Sub MacroCopia()
'copiar col B,C,D,F,G,K,L,M,N,O,P,R,S de vs.celdas seleccionadas
diré = Selection.Address
For Each cd In Selection
x = cd.Row
If rgo = "" Then
rgo = "B" & x & ":D" & x & "," & "F" & x & ":G" & x & "," & "K" & x & ":P" & x & "," & "T" & x & ":U" & x
Else
rgo = rgo & ",B" & x & ":D" & x & "," & "F" & x & ":G" & x & "," & "K" & x & ":P" & x & "," & "T" & x & ":U" & x
End If
Next
Range(rgo).Copy
End Sub

Si selecciono mas de 8 celdas me sale:

Se ha producido el error 1004 en tiempo de ejecución:

Error en el método "Range" de objeto "_Global"

Me podrías ayudar??

Gracias y perdón por las molestias!

1 respuesta

Respuesta
1

Es una buena macro, la he probado. Me deja elegir 10 columnas, después da el error que dices.

Esas 10 filas equivales a 40 áreas ya que cada línea tiene 4 áreas distintas.

He probado haciendo que hubiera una área por fila y entonces me ha dejado 34.

Luego hay alguna limitación que no he encontrado documentada en ningún sitio respecto al número de áreas que puede tener un rango o respecto a la longitud de la cadena de texto que se puede pasar a la instrucción

Range(rgo)

Lo único que puede hacerse es crear ese rango con menor número de áreas. Eso sería fácil por ejemplo si todas las filas van seguidas. Pero si van salteadas será más difícil y puede que no sirva.

Dime si las filas van seguidas.

He investigado más el asunto.

El problema creo que viene de la longitud de la cadena rgo, si pasa de 256 se produce el error.

Pues ya miraré a ver si se puede hacer algo para evitar ese problema, pero ahora tengo que dejar el ordenador un buen rato, luego me pondré.

Esta es la macro que te sirve para seleccionar más filas.

Sub MacroCopia()
'copiar col B,C,D,F,G,K,L,M,N,O,P,R,S de vs.celdas seleccionadas
Dim Rango As Range
For Each cd In Selection
  x = cd.Row
  rgo = "B" & x & ":D" & x & "," & "F" & x & ":G" & x & "," & "K" & x & ":P" & x & "," & "T" & x & ":U" & x
  If Rango Is Nothing Then
    Set Rango = Range(rgo)
  Else
    Set Rango = Application.Union(Rango, Range(rgo))
  End If
Next
Rango.Copy
End Sub

Y eso es todo, espero que te sirva y lo entiendas. Si no es así pregúntame. Y si ya está bien no olvides puntuar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas