Foros del Web » Soporte técnico » Ofimática »

Guardar datos de archivo excel2007 en varias hojas excel2003

Estas en el tema de Guardar datos de archivo excel2007 en varias hojas excel2003 en el foro de Ofimática en Foros del Web. Hola a todos, Tengo varios archivos que estan en formato excel 2007, y requiero guardar cada uno de esos archivos, cada uno con mas o ...
  #1 (permalink)  
Antiguo 19/01/2010, 16:19
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Guardar datos de archivo excel2007 en varias hojas excel2003

Hola a todos,

Tengo varios archivos que estan en formato excel 2007, y requiero guardar cada uno de esos archivos, cada uno con mas o menos 400.000 registros en formato 2003, pero como la cantidad excede el tamaño permitido por hoja para excel 2003 necesito que se guarden en diferentes hojas.

Ej: tengo un archivo excel2007 de 400.000 registros, poder guardarlo en un excel2003 y que quede divididos esos 400.000 registros en varias hojas.

Agradezco la ayuda que me peudan brindar, hacerlo de forma manual toma bastante tiempo por la cantidad de archivos.
  #2 (permalink)  
Antiguo 20/01/2010, 05:37
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

hola delta132,

te paso una función que hace lo que tu pides y te explico:
'------------------------------------
Sub excel2003()
On Error GoTo msgError

'inicio es la variable que marcará el inicio de cada seleccion de filas
inicio = 1
'como vamos a ir cogiendo de 65000 en 65000 inicializamos contador a esta fila
contador = 65000
'almacenamos el nombre del libro 2007
libro2007 = ThisWorkbook.Name
'creamos un libro nuevo
Workbooks.Add
'guardamos el nombre
nuevoLibro = Workbooks.Item(2).Name

Dim hoja As Integer
hoja = 1
Do
'vamos al libro de excel 2007
Windows(libro2007).Activate
'seleccionamos el rango de las filas y las copiamos
Rows(inicio & ":" & contador).Select
Selection.Copy
'ahora vamos al libro nuevo y pegamos las filas copiadas
Windows(nuevoLibro).Activate
Sheets("Hoja" & hoja).Select
Selection.PasteSpecial
'añadimos una hoja nueva al libro
Sheets.Add After:=Sheets(Sheets.Count)
contador = contador + 65000
inicio = inicio + 65000
hoja = hoja + 1
Loop Until contador > 455000

'y guardamos como libro excel 2003
ActiveWorkbook.SaveAs Filename:= _
"C:\" & "Transformado_" & nuevoLibro, FileFormat:= _
xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
MsgBox ("Tarea Finalizada")
Exit Sub

msgError:
MsgBox ("Se ha producido un error")
End Sub
'----------------------------------------------------
1) Esta función la debes ejecutar en tu libro 2007 mediante un botón asignándole el nombre de la misma al susodicho botón.
2) Como has hablado de más o menos 400000 registros, la función recoge hasta la fila 455000 y luego se para
3) El archivo excel 2003 lo guarda en C:\ directamente, con el nombre que excel haya creado al nuevo libro (normalmente es libro1.xls) y he añadido una cadena de texto ('_Transformado') para evitar coincidencias (que en C:\ tengas un excel que se llame Libro1.xls --> de esta manera tendrás un archivo en C:\ llamado Transformado_Libro1.xls)
4) La función según va copiando filas va creando nuevas hojas en el libro nuevo. como excel ya abre nuevos libros con 3 hojas por defecto, al final te sobrarán 3 hojas donde no hay nada (la hoja ocho, nueve y diez)

la función se puede mejorar, pero supongo que es una tarea fija que tienes que hacer y tampoco es plan de refinarla al 100%, no?

bueno espero que te sirva. si tienes dudas ya sabemos por donde andamos.

salu2
  #3 (permalink)  
Antiguo 20/01/2010, 05:43
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

Vaya! se me ha olvidado pasarte las variables globales...
te paso la función entera, para que no haya dudas
'---------------------------------------------------------
Dim nuevoLibro As String
Dim libro2007 As String
Dim contador As Integer
Dim inicio As Integer

Sub excel2003()
On Error GoTo msgError

'inicio es la variable que marcará el inicio de cada seleccion de filas
inicio = 1
'como vamos a ir cogiendo de 65000 en 65000 inicializamos contador a esta fila
contador = 65000
'almacenamos el nombre del libro 2007
libro2007 = ThisWorkbook.Name
'creamos un libro nuevo
Workbooks.Add
'guardamos el nombre
nuevoLibro = Workbooks.Item(2).Name

Dim hoja As Integer
hoja = 1
Do
'vamos al libro de excel 2007
Windows(libro2007).Activate
'seleccionamos el rango de las filas y las copiamos
Rows(inicio & ":" & contador).Select
Selection.Copy
'ahora vamos al libro nuevo y pegamos las filas copiadas
Windows(nuevoLibro).Activate
Sheets("Hoja" & hoja).Select
Selection.PasteSpecial
'añadimos una hoja nueva al libro
Sheets.Add After:=Sheets(Sheets.Count)
contador = contador + 65000
inicio = inicio + 65000
hoja = hoja + 1
Loop Until contador > 455000

'y guardamos como libro excel 2003
ActiveWorkbook.SaveAs Filename:= _
"C:\" & "Transformado_" & nuevoLibro, FileFormat:= _
xlExcel8, Password:="", WriteResPassword:="", ReadOnlyRecommended:=False _
, CreateBackup:=False
MsgBox ("Tarea Finalizada")
Exit Sub

msgError:
MsgBox ("Se ha producido un error")
End Sub
'---------------------------------------------------------

y antes se me ha olvidado comentarte que la función saca una alerta al final avisándote de que todo se ha realizado correctamente o ha habido algún error.

salu2
  #4 (permalink)  
Antiguo 20/01/2010, 10:23
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

Hola, muchas gracias por responder, pero he intentado introducir en excel esto y no he sabido hacerlo(la vdd mi área es otra :S) .. podrías indicarme por favor donde introducir este script? muchas gracias que DIos te bendiga.

Intente colocando el codigo en el archivo que sale al presionar Alt + F11, pero cuando le doy Ejecutar me aparece el error "Se ha producido un error"

Última edición por delta132; 20/01/2010 a las 10:36
  #5 (permalink)  
Antiguo 20/01/2010, 10:42
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

ok, no hay problema ;)
paso a paso:

1) abres tu libro de excel 2007 (donde tienes los 400000 registros)
2)pulsa Alt+F11 (hasta aquí ibas bien)
3)en el arból que aparece en esta pantalla a la izquierda haz click derecho en 'Microsoft Excel Objetos' y ahí vas a Insertar --> Módulo
4)ahora estás dentro de un Módulo de Excel (que digamos que es donde van funciones genéricas. En el resto de elementos de este árbol van funciones específicas de cada hoja)
5) aqui tienes que pegar todo el código que yo te he puesto
6)cierra la ventana que se abrió pulsando alt+f11
7) crea un botón en la hoja de tu libro excel 2007
8)click derecho y --> asignar macro
9)aparecerá una ventanita donde aparece una macro que se llama excel2003 y pulsa Aceptar

Ya lo tienes. Siguiendo estos pasos ya puedes empezar a utilizar esta funcionalidad. Lo único es que en cada libro excel 2007 que tengas que copiar los registros tienes que hacer todos estos pasos, ok?

si tienes dudas sigue preguntando, para eso estamos.

salu2
  #6 (permalink)  
Antiguo 20/01/2010, 10:44
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

por si acaso...
el paso 9) tienes que seleccionar la macro excel2003 y pulsa aceptar (es que te he puesto que aparece en la ventanita pero no que también lo tienes que seleccionar...)

jejejeje.

salu2
  #7 (permalink)  
Antiguo 20/01/2010, 10:59
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

Oye, muchas gracias por la explicación, pude agregar todo perfectamente, pero al ejecutar la macro me aparece el mismo error, una pregunta, la hoja donde estan los 400.000 registros deben tener algun formato en especifico? algún nombre en especial? tal ves eso ayude a solventar el error que me arroja :S .. Muchas gracias y que pena enserio por tanta preguntadera.

Última edición por delta132; 20/01/2010 a las 11:05
  #8 (permalink)  
Antiguo 20/01/2010, 11:15
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

he estado probando (por probar) a implementarlo en una hoja de excel 2003 y me da el mismo error que a ti (bueno, de hecho el error le he puesto yo en el código, que si algo falla se vaya a la parte de error a mostrar dicho mensaje, jejeje).
este archivo solo va a funcionar en un libro excel 2007 (extensión xlsx). ten en cuenta que el código le esta diciendo que seleccione todas las filas desde la 1 hasta la 65000 y en la siguiente hoja la seleccion es desde la 65001 hasta 130000, y en excel 2003 no hay fila 130000, ni si quiera hay fila 65537 y por eso falla.

comprueba que la extensión de tu libro excel 2007 es xlsx y si no prueba a abrir un nuevo libro excel 2007 (.xlsx) y repite la misma operación de copiar el código en un módulo y verás que funciona (eso espero...) aunque no tenga nada para copiar, ok?

si no funciona pasamos a la siguiente fase que es decirme donde está fallando el código (ya te explicaré como lo puedes hacer)

salu2
  #9 (permalink)  
Antiguo 20/01/2010, 11:29
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

Hola, fijate lo que he realizo segun tus indicaciones:

1- Cree un archivo con 200.000 registros
2- Lo guarde con extensión xlsx
3- Presione Alt + F11
4- Inserte un nuevo modulo y pegue el código que me brindaste :)
5- Presione Alt + F11
6- Agrege un boton a la hoja y asigne la macro
7- Ejecuto la macro y me sale "Se ha producido un error"

La verdad no encuentro explicación a esto :S, no me genera ninguna salida ni nada jeje.

Muchas gracias de nuevo .
  #10 (permalink)  
Antiguo 20/01/2010, 12:12
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

bueno...

vamos a probar con esto:

1) abre con alt+f11 el código y borra estas 3 lineas
msgError:
MsgBox ("Se ha producido un error")
End Sub
de esta manera el codigo va a fallar pero vamos a saber donde y porqué
2) ejecuta la macro con el botón
aparecerá una ventana de error con un boton que pone 'depurar' púlsalo
3) dime el mensaje de error que da y cópiame la linea marcada en amarillo

con esto detectaremos qué está pasando.

salu2
  #11 (permalink)  
Antiguo 20/01/2010, 14:17
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

Hola , quite eso y me decia que faltaba el End Sub así que lo agrege y ejecute de nuevo y me salio el mensaje:

"Error de defición no se ha definido la etiqueta.", y marca lo siguiente:

-> "Sub excel2003()
On Error GoTo msgError"

Gracias por la ayude que me brindas :) .
  #12 (permalink)  
Antiguo 21/01/2010, 01:01
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

ains! es verdad.

tienes que quitar tambien esa línea en el código --> On Error GoTo msgError
es la segunda línea. no hemos podido detectar el fallo porque, al no quitar esta línea, le estamos diciendo a Excel que si la macro falla se vaya a otra parte de la función que se llama msgError (Que fue la que quitamos ayer). fallo mío! (sorry ;)

quita esta segunda línea y vuelve a ejecutar el botón. y la misma operación; en la ventanita que salga pulsa el botón Depurar y me dices que pone en el mensaje y la línea de código que ha quedado marcada en amarilla.

salu2
  #13 (permalink)  
Antiguo 21/01/2010, 11:21
 
Fecha de Ingreso: abril-2006
Ubicación: Bogotá
Mensajes: 251
Antigüedad: 18 años
Puntos: 14
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

Hola , sabes, me puse a hacer unas pruebas para detectar porque pasaba ese error , y puse las variable contador e inicio como Double(tenienendo en cuenta que acepta un numero mayor y bingo !!!

Lo único que veo raro es que a un archivo de 280.000 lineas aprox, me creo un archivo con 11 hojas de las cuales solo las primeras 5 estan llenas lo que completa efectivamente la data, pero me queda la duda de porque me crea 11 hojassi solo 5 son las que tienen información.


Muchas gracias enserio por tanta ayuda que me brindaste :)= .amigo
  #14 (permalink)  
Antiguo 21/01/2010, 11:29
Avatar de ceSharp  
Fecha de Ingreso: octubre-2008
Ubicación: Madrid
Mensajes: 495
Antigüedad: 15 años, 5 meses
Puntos: 66
Respuesta: Guardar datos de archivo excel2007 en varias hojas excel2003

hola delta,

me alegro que te funcione!!!!
no me di cuenta de poner otro tipo de variables (hubiera valido también Long), pero como Integer me funcionaba a mi lo descarte como error.

Te cuento. siempre va a crear hojas de más porque, aunque no haya registros en la filas, las copia, va al otro excel que se crea solo y las pega. Pero la aplicación no entiende si la fila esta vacía o no.

podía haberse hecho comprobando si la fila a copiar está vacía o no, pero lleva más trabajo y el proceso es más lento (estabamos hablando de más de 400000 registros... mucha tela para Excel! ;)

pero bueno, seguro que te ayuda para esa tarea tan costosa que debes hacer, no?

una vez más, me alegro que te funcione!!

salu2

Etiquetas: excel, hojas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:56.