MACRO VBA para copiar y concatenar datos de varias tablas en una sola, tiene un limite y no me deja ejecutar.

Macro que me porporcionaron en la pagina, ya que lo que hace la macro es copiar datos de varias tablas y concatenarlas en una sola tabla, como son muchas tablas esta tiene un limite cuando llega a mas o menos 21 tablas a copiar datos, de alli no pasa y aparece un letrero que dice "ERROR EN EL METODO ´RANGE´ de objeto "GLOBAL".

Sub Tabla_Unica()
'Por Dante Amor
    Application.ScreenUpdating = False
    u = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    cols = s
    For i = 3 To u
       Range("DG" & i & ":DP" & i & ",HW" & i & ":IF" & i & ",MM" & i & ":MV" & i & ",RC" & i & ":RL" & i & ",VT" & i & ":WC" & i & ",AAJ" & i & ":AAS" & i & ",AEZ" & i & ":AFI" & i & ",AJP" & i & ":AJY" & i & ",AOG" & i & ":AOP" & i & ",ASW" & i & ":ATF" & i & ",AXM" & i & ":AXV" & i & ",BCC" & i & ":BCL" & i & ",BGT" & i & ":BHC" & i & ",BLJ" & i & ":BLS" & i & ",BPZ" & i & ":BQI" & i & ",BUP" & i & ":BUY" & i & ",BZG" & i & ":BZP" & i & ",CDW" & i & ":CEF" & i & ",CIM" & i & ":CIV" & i & ",CNC" & i & ":CNL" & i & ",CRT" & i & ":CSC" & i & ",CWJ" & i & ":CWS" & i & ",DAZ" & i & ":DBI" & i & ",DFP" & i & ":DFY" & i).SpecialCells(xlCellTypeConstants, 23).Copy
        Range("DGD" & i).PasteSpecial Paste:=xlPasteValues
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

En la linea numero 7, esta copiando los datos de las tablas, por ejemplo la primera tabla es de la columna ",DG" a la ":DP" y asi sucecivamente, la macro funciona bien hasta la ",CRT" a la ":CSC"

Y en la linea 8 se le indica a la macro desde que columna debe empezar a pegar los datos que copia de los rangos especificados en la linea 7,

Despues de alli aparece un letrero como este:

Hasta ese punto van mas o menos 24 tablas y en la tabla numero 21 es que tiene problemas la macro,

Actualmente necesito copiar datos de 40 tablas.

Espero sea una solucion sencilla mis conocimientos con macros son muy basicos casi nulos,

2 respuestas

Respuesta
1

¿Y en cuál línea de la macro se detiene?

¿Cuál fila de excel no pudo copiar?

Revisa la fila que no pudo copiar y verifica qué tiene de diferente a las otras filas, tal vez no tiene datos o tal vez tiene algunas celdas combinadas.

El problema que tienes es de datos, tienes que revisar tus datos, encontrar cuál es el problema y corregirlo. Si ya identificaste que es la fila 21, entonces revisa qué diferencias tiene la 21 contra la 20, por ejemplo.

Dante gracias por contestar

No tengo ni celdas combinadas. De hecho lo hice en un excel de prueba.

El error de la macro me lo muestra rn la línea 8. Cuando trato de alargar la cantidad de columnas a copiar.

Te voy a subir las 2 linesas. Una algo más corta que es lanque funciona bn, y la otra algo más larguita que es la que arroja el error. Lo puedes probar en un excel con datos iguales en todos sus celdas y creo que el error es más por rango que por algún otro problema...

Línea 8 que funciona:

  Range("DG" & i & ":DP" & i & ",HW" & i & ":IF" & i & ",MM" & i & ":MV" & i & ",RC" & i & ":RL" & i & ",VT" & i & ":WC" & i & ",AAJ" & i & ":AAS" & i & ",AEZ" & i & ":AFI" & i & ",AJP" & i & ":AJY" & i & ",AOG" & i & ":AOP" & i & ",ASW" & i & ":ATF" & i & ",AXM" & i & ":AXV" & i & ",BCC" & i & ":BCL" & i & ",BGT" & i & ":BHC" & i & ",BLJ" & i & ":BLS" & i & ",BPZ" & i & ":BQI" & i & ",BUP" & i & ":BUY" & i & ",BZG" & i & ":BZP" & i & ",CDW" & i & ":CEF" & i & ",CIM" & i & ":CIV" & i & ",CNC" & i & ":CNL" & i).SpecialCells(xlCellTypeConstants, 23).Copy
       

Y aqui va la otra que tiene el problema

 Range("DG" & i & ":DP" & i & ",HW" & i & ":IF" & i & ",MM" & i & ":MV" & i & ",RC" & i & ":RL" & i & ",VT" & i & ":WC" & i & ",AAJ" & i & ":AAS" & i & ",AEZ" & i & ":AFI" & i & ",AJP" & i & ":AJY" & i & ",AOG" & i & ":AOP" & i & ",ASW" & i & ":ATF" & i & ",AXM" & i & ":AXV" & i & ",BCC" & i & ":BCL" & i & ",BGT" & i & ":BHC" & i & ",BLJ" & i & ":BLS" & i & ",BPZ" & i & ":BQI" & i & ",BUP" & i & ":BUY" & i & ",BZG" & i & ":BZP" & i & ",CDW" & i & ":CEF" & i & ",CIM" & i & ":CIV" & i & ",CNC" & i & ":CNL" & i & ",CRT" & i & ":CSC" & i & ",CWJ" & i & ":CWS" & i & ",DAZ" & i & ":DBI" & i & ",DFP" & i & ":DFY" & i).SpecialCells(xlCellTypeConstants, 23).Copy
       

Espero me ayudes y me avisas si estoy depronto en algun error.

Bendiciones

Ya probé la que tiene el problema y no me envía error. Claro, la estoy probando con mis datos de prueba, por eso te pido que revises tus datos justamente en la fila donde ocurre el error.

Entiendo Dante,

Bueno entonces no se si el problema es la version del excel que tengo, pero te voy a enviar las 2 pruebas con las 2 macros y sus respectivos resultados para que tu veas que lo único que le cambia a la macro es la extensión o alargamiento de la línea 8 indicándole que copee más datos de la las columnas.

Macro buena:

y ahora la macro que no ejecuta:

El excel de prueba que estoy manejando solo tiene datos del numero 1 en todas sus celdas. Y no se ha modificado nada más al respecto.

De igual forma si a ti te muestra bien procedo a hacer la macro entonces en 2 partes. Solo quería descartar opciones.

Mil gracias Dante

Podrías copiar la macro tal cual la tienes con el problema. Ya que en la imagen no se observa bien.

También intenta ir aumenta una columna y pruebas, otra columna y prueba, otra columna y pruebas, para ver si el problema es el número de columnas o si la línea de código tiene algún límite.

Sub Tabla_Unica()
'Por Dante Amor
    Application.ScreenUpdating = False
    u = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    cols = s
    For i = 3 To u
       Range("DG" & i & ":DP" & i & ",HW" & i & ":IF" & i & ",MM" & i & ":MV" & i & ",RC" & i & ":RL" & i & ",VT" & i & ":WC" & i & ",AAJ" & i & ":AAS" & i & ",AEZ" & i & ":AFI" & i & ",AJP" & i & ":AJY" & i & ",AOG" & i & ":AOP" & i & ",ASW" & i & ":ATF" & i & ",AXM" & i & ":AXV" & i & ",BCC" & i & ":BCL" & i & ",BGT" & i & ":BHC" & i & ",BLJ" & i & ":BLS" & i & ",BPZ" & i & ":BQI" & i & ",BUP" & i & ":BUY" & i & ",BZG" & i & ":BZP" & i & ",CDW" & i & ":CEF" & i & ",CIM" & i & ":CIV" & i & ",CNC" & i & ":CNL" & i & ",CRT" & i & ":CSC" & i & ",CWJ" & i & ":CWS" & i & ",DAZ" & i & ":DBI" & i & ",DFP" & i & ":DFY" & i).SpecialCells(xlCellTypeConstants, 23).Copy
        Range("DGD" & i).PasteSpecial Paste:=xlPasteValues
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

Es asi. Lo que pasa es qye en la foto esta con salto de linea pero de igual forma no da. Yo creo que es por el numero de columnas. Ya intente agregando una a una. El error lo muestra desde la columna CWJ.

Si el tema es por rango queria saber si se puede extender mas el rango. La verdad estoy casi seguroque es por el numero de columnas ya que he probado de todo.. 

Entonces puede ser la versión.

Ya volví a probar el código que pusiste y no tengo problemas

Una opción es que copies un rango de columnas en la celda DGD y otro rango de columnas en la celda DGE y luego copies DGD y DGE y las pegues en DGF

|

¡Gracias! Si yo creo que va a ser la version... voy a tratar de organizar bn lascolumnas o hago la macro en 2 partes... bueno Dante de igual manera mil gracias.. :)

Dante buenas tardes... hay alguna manera de que la macro. ¿Al encontrar una fila totalmente vacía de la tabla no se detenga? ¿Simplemente si la fila esta vacía totalmente las deje en la nueva tabla vacía y siga hacia abajo su ejecución?

Tu me dices si abro otra pregunta o si es sencillo y se reemplaza alguna línea.

Mil gracias

Se detiene y te envía un error.

Entonces después de esta línea

 Application.ScreenUpdating = False

Pon esta línea

On Error Resume Next

Me sigue apareciendo el error y en el ejemplo de prueba que tengo la fila numero 13 esta vacía,

¿No se si se le pueda indicar a la fórmula hasta que fila debe copiar ya que podría seguir haciéndolo hasta el final de la hoja cierto?.

La idea seria que si esta vacía la fila 13 en la tabla donde pega siga también vacía y después de la 14 siguiera copiando los datos.

Mil gracias dante.

Espero no sea error de la version esta vez :(

Revisa bien dónde tienes que poner la instrucción On error

Entonces después de esta línea

 Application.ScreenUpdating = False

Pon esta línea

On Error Resume Next

Excelente Dante, que vergüenza no había leído bien.

Una ultima cosa por organzar a mi macro, ya me da vergüenza preguntar tanto por esta página pero de verdad que me ayudan mucho:

¿La macro sigue su curso pero porque copia el numero 1? ¿No debería quedar vacía?

Esta pegando lo que tiene en memoria, habría que copiar una celda, la que quieras, pero que se encuentre vacía, cambia "A1" por una celda que tengas vacía.

Sub Tabla_Unica()
'Por Dante Amor
    Application.ScreenUpdating = False
    On Error Resume Next
    u = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
    cols = s
    For i = 3 To u
       Range("A1").copy
       Range("DG" & i & ":DP" & i & ",HW" & i & ":IF" & i & ",MM" & i & ":MV" & i & ",RC" & i & ":RL" & i & ",VT" & i & ":WC" & i & ",AAJ" & i & ":AAS" & i & ",AEZ" & i & ":AFI" & i & ",AJP" & i & ":AJY" & i & ",AOG" & i & ":AOP" & i & ",ASW" & i & ":ATF" & i & ",AXM" & i & ":AXV" & i & ",BCC" & i & ":BCL" & i & ",BGT" & i & ":BHC" & i & ",BLJ" & i & ":BLS" & i & ",BPZ" & i & ":BQI" & i & ",BUP" & i & ":BUY" & i & ",BZG" & i & ":BZP" & i & ",CDW" & i & ":CEF" & i & ",CIM" & i & ":CIV" & i & ",CNC" & i & ":CNL" & i & ",CRT" & i & ":CSC" & i & ",CWJ" & i & ":CWS" & i & ",DAZ" & i & ":DBI" & i & ",DFP" & i & ":DFY" & i).SpecialCells(xlCellTypeConstants, 23).Copy
        Range("DGD" & i).PasteSpecial Paste:=xlPasteValues
    Next
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    MsgBox "Fin"
End Sub

Al final de mi respuesta hay un botón para valorar la respuesta: "Votar" o "Excelente", apreciaría que cambiaras la valoración.

Respuesta
1

Yo no tengo mucha noción de copiado, son pocos mis conocimientos con macros, pero acá va mi sugerencia ...

Si con 20 tablas te funcionaba bien y ahora tienes 40 tablas ... ¿por qué no armas 2 macros con 20 tablas en cada una y después armas un commandbutton y haces que llame a la 2 macros?

Sebastián claro que lo he pensado, pero de pronto halla u a solución algo básica que alguien con conocimiento me ayude a modificar. Hay que agotar los recursos y podría hacer las 2 macros y juntarlas como dices.. pero quedarían repartidas en 2 tablas y necesito que los resultados queden en una sola tabla. Me tocaría después hacer la misma macro y hacer otra tabla repitiendo los datos de nuevo. Traduciendo a más espacio en el libro.. entonces espero se puedes hacer de alguna manera sencilla ya si no hay más remedio tomare tu consejo..

Mil gracias

Yo sigo metiendo la cuchara en temas que no tengo muy claros je je espero no te moleste

Pero sino conté mal, la tabla ", CRT" a la ":¿CSC" es la numero 23 y tu dices que tienes 24?

Probaste cambiar el valor de copiado que dice

. SpecialCells(xlCellTypeConstants, 23). Copy

Y poner ".SpecialCells(xlCellTypeConstants, ¿24).Copy" ? quizas sea ese el problema ...

Y si llega a ser ese el problema, cuando pongas las 40 tablas ahí tendrás que cambiar el 24 por 40

Espero sea la solución a tu problema, sino tendrás que esperar a que Dante vea la pregunta je je

saludos =)

Jajaja tranquilo sebastián.. no me molesta en lo absoluto, y te cuento que si trate cambiando esa parte de la macro y no me funciono :( yo creo que si va tocar que dante vea la pregunta...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas