exportar de un excel a otro excel

04/05/2008 - 23:39 por Diana | Informe spam
Estoy creando una aplicación con menú personalizado y quisiera agregar en el
menú la opción de exportar la hoja activa a otro excel. Sé crear el archivo
excel pero no sé cómo escribir la instrucción para que copie la información
del rango A1:P10000 de la hoja activa de la aplicación en el nuevo libro de
excel con los mismos formatos que la hoja activa.
Qué instrucción inserto en el siguiente código para que haga ésto?
Sub Exportar()
Dim xlObj As Object
Set xlObj = CreateObject("Excel.Application")
With xlObj
.Visible = True
.Workbooks.Add
With .ActiveWorkbook.Worksheets(1)
.Activate
End With
End With
End Sub

Muchas gracias.

Preguntas similare

Leer las respuestas

#6 Diana
05/05/2008 - 20:58 | Informe spam
Héctor Miguel,
Después de estas preguntas te comprendo mejor.
Todo está corriendo en VBA
No sabía que que no se podían pasar objetos entre dos instancias de excel en
forma transparente. Me falta tanto por aprender!
Entonces la pregunta sería otra.Cómo hago para que el usuario pueda capturar
la información de la ventana activa (son siempre informes financieros que se
van armando de acuerdo a la elección que haga el ususario en un listbox) y
enviarla a un excel para trabajarla?
Se me ocurre
1) Crear el excel con Create Object.
2) Darle una instrucción para que se guarde como un archivo de excel en el
escritorio o Mis Documentos del usuario.
3) Recién en esa instancia hago que se copie y pegue entre los dos libros
como dos excel comunes (del libro 1 al libro 2).

Es así o hay algo mejor que desconozco?
Muchas gracias

"Héctor Miguel" escribió en el mensaje
news:uT3ph$
hola, Diana !

1) dejame insistir en que instancias separadas de una misma aplicacion NO
"comparten" sus objetos (es decir)...
si ya tienes un excel corriendo, y creas una nueva instancia
(createobject) no puedes "pasar objetos" entre ambas
(al menos, de forma "transparente", como pasar hojas del libro1 al
libro2 cuando ambos libros son de la misma instancia)

2) pregunta "basica" (de mi parte) derivada de tu primer comentario: ->
"... estoy CREANDO una aplicacion ..."
-> por que estas usando instrucciones del tipo: ->
CreateObject("Excel.Application") -?????-
-> tu "aplicacion" son macros desde el mismisimo excel ?
-> tu "aplicacion" esta desarrollada en otros lenguajes -primarios- de
programacion ? (vb, c, delphi, ...)

saludos,
hector.

__ la consulta original __
Mi problema es que no logro que me copie la hoja activa luego de crear el
objeto.
La hoja activa de la aplicacion no tiene codigos en su modulo de clase.
Mi problema es que no se como escribir la instruccion de que copie la
hoja activa de la aplicacion en el objeto excel creado.
Los pasos son:
1. El usuario selecciona la opcion "Exportar informe a excel"en el menu.
2. Se dispara el codigo Exportar() antes expuesto. Aqui se creo el nuevo
libro de excel que se llama Libro1 con la hoja 1 activa.
3. Como escribo la instruccion de que copie la hoja activa de la
aplicacion a la nueva Hoja1 del Libro1 creado por la rutina Exportar()?
4. No hay instancias previas donde haya creado otros CreateObject. Esta
va a ser la unica.
Lo que quiero lograr es que el usuario pueda copiar el informe de la hoja
activa a nuevo excel para poder trabajarlo.
5. ... no logro escribir la instruccion dentro del codigo expuesto para
que copie la hoja activa
y la pegue en la hoja 1 del libro 1 creado con CreateObject.




Respuesta Responder a este mensaje
#7 Héctor Miguel
05/05/2008 - 22:08 | Informe spam
hola, Diana ! (dejame hacer un ligero "batido" con esta consulta tuya) :))

1) si esta parte ya esta comprendida...
Despues de estas preguntas te comprendo mejor...
No sabia que que no se podían pasar objetos entre dos instancias de excel en forma transparente...



2) creo que NO deberias de "insistir" en este procedimiento ("instanciar" OTRO excel)...
Se me ocurre
1) Crear el excel con Create Object.
2) Darle una instruccion para que se guarde como un archivo de excel en el escritorio o Mis Documentos del usuario.
3) ... en esa instancia hago que se copie y pegue entre los dos libros como dos excel comunes (del libro 1 al libro 2).



3) me inclino por responder a esta parte de tu consulta:
Todo esta corriendo en VBA... Entonces la pregunta seria otra.
Como hago para que el usuario pueda capturar la informacion de la ventana activa
(son siempre informes financieros que se van armando de acuerdo a la elección que haga el ususario en un listbox)
y enviarla a un excel para trabajarla?



a) como ya te habia comentado, una instruccion del tipo: -> <objeto_hoja>.Copy
CREA un nuevo libro (en la misma instancia de excel) con SOLO la hoja "copiada":
-> con todo y todo, formatos, formulas, nombres, vinculos, objetos (y su asignacion de macros), eventos, etc.
Y... deja el nuevo libro como el libro activo, por lo que puedes "manipularlo" como el "ActiveWorkbook", "ActiveSheet", etc.
con lo que podrias guardarlo +/- asi:
1) en el directorio activo: -> ActiveWorkbook.SaveAs "Copia de mi libro X", xlWorkbookNormal
2) en otro directorio: -> ActiveWorkbook.SaveAs "c:uta y\subcarpetas\Copia de mi libro X", xlWorkbookNormal

b) si quieres "congelar" las formulas con sus valores constantes (sin perder formatos) y necesitas eliminar filas/columnas "sobrantes"
ANTES de hacer el guardado (inciso a anterior) prueba con instrucciones +/- como las siguientes:

With ActiveSheet
.UsedRange.Value = .UsedRange.Value
.Range("aa1:az60").Clear
End With

saludos,
hector.
Respuesta Responder a este mensaje
#8 Diana
05/05/2008 - 23:26 | Informe spam
Héctor Miguel,
Más que claro y muchas gracias. En lo único que estoy fallando es tu punto
a) de la explicación porque no sé crear un libro nuevo en la misma instancia
y que copie todo. Sólo sé crear un nuevo libro con CreateObject que en mi
caso no sirve.

a) como ya te habia comentado, una instruccion del tipo: ->
<objeto_hoja>.Copy
CREA un nuevo libro (en la misma instancia de excel) con SOLO la hoja
"copiada":
-> con todo y todo, formatos, formulas, nombres, vinculos, objetos (y su
asignacion de macros), eventos, etc.

Si sólo me dijeras cómo escribir esta instrucción, y siguiendo el resto de
tu explicación, ya podría terminar sola. Desde ya te agradezco todo lo que
me estás enseñando.
Diana



"Héctor Miguel" escribió en el mensaje
news:
hola, Diana ! (dejame hacer un ligero "batido" con esta consulta tuya)
:))

1) si esta parte ya esta comprendida...
Despues de estas preguntas te comprendo mejor...
No sabia que que no se podían pasar objetos entre dos instancias de excel
en forma transparente...



2) creo que NO deberias de "insistir" en este procedimiento ("instanciar"
OTRO excel)...
Se me ocurre
1) Crear el excel con Create Object.
2) Darle una instruccion para que se guarde como un archivo de excel en
el escritorio o Mis Documentos del usuario.
3) ... en esa instancia hago que se copie y pegue entre los dos libros
como dos excel comunes (del libro 1 al libro 2).



3) me inclino por responder a esta parte de tu consulta:
Todo esta corriendo en VBA... Entonces la pregunta seria otra.
Como hago para que el usuario pueda capturar la informacion de la ventana
activa
(son siempre informes financieros que se van armando de acuerdo a la
elección que haga el ususario en un listbox)
y enviarla a un excel para trabajarla?



a) como ya te habia comentado, una instruccion del tipo: ->
<objeto_hoja>.Copy
CREA un nuevo libro (en la misma instancia de excel) con SOLO la hoja
"copiada":
-> con todo y todo, formatos, formulas, nombres, vinculos, objetos (y
su asignacion de macros), eventos, etc.
Y... deja el nuevo libro como el libro activo, por lo que puedes
"manipularlo" como el "ActiveWorkbook", "ActiveSheet", etc.
con lo que podrias guardarlo +/- asi:
1) en el directorio activo: -> ActiveWorkbook.SaveAs "Copia de mi libro
X", xlWorkbookNormal
2) en otro directorio: -> ActiveWorkbook.SaveAs "c:uta
y\subcarpetas\Copia de mi libro X", xlWorkbookNormal

b) si quieres "congelar" las formulas con sus valores constantes (sin
perder formatos) y necesitas eliminar filas/columnas "sobrantes"
ANTES de hacer el guardado (inciso a anterior) prueba con instrucciones
+/- como las siguientes:

With ActiveSheet
.UsedRange.Value = .UsedRange.Value
.Range("aa1:az60").Clear
End With

saludos,
hector.

Respuesta Responder a este mensaje
#9 Héctor Miguel
06/05/2008 - 03:05 | Informe spam
hola, Diana !

Mas que claro y muchas gracias.
En lo unico que estoy fallando es tu punto a)
de la explicacion porque no se crear un libro nuevo en la misma instancia y que copie todo.
Sólo se crear un nuevo libro con CreateObject que en mi caso no sirve...
Si solo me dijeras como escribir esta instruccion, y siguiendo el resto de tu explicacion, ya podria terminar sola...



en tu segunda consulta comentaste lo siguiente:
"> Trate de incluir la instruccion <objeto_hoja>.Copy pero no funciona.
"> Debo estar haciendo algo mal porque me crea un nuevo libro.

o sea, que ya supiste "como" crear un libro nuevo (en la misma instancia de excel), no ? (p.e.)
-> crear un libro nuevo con SOLO una copia "fiel" de la hoja que le indiques...

- la hoja activa ? (sea cual sea el libro activo)
ActiveSheet.Copy

- la hoja activa del libro que contiene las macros ?
ThisWorkbook.ActiveSheet.Copy

- la hoja 5 (en su orden o posicion dentro) del libro que contiene las macros ?
ThisWorkbook.Worksheets(5).Copy

- cual es la que necesitas copiar ?

saludos,
hector.
Respuesta Responder a este mensaje
#10 Diana
06/05/2008 - 05:22 | Informe spam
Mil gracias!!!
Funciona perfecto.
Me estaba enredando sola en mis propios errores. Después de leer atentamente
tus explicaciones lo resolví.
Como siempre gracias por tus enseñanzas.
Saludos desde Buenos Aires,
Diana



"Héctor Miguel" escribió en el mensaje
news:
hola, Diana !

Mas que claro y muchas gracias.
En lo unico que estoy fallando es tu punto a)
de la explicacion porque no se crear un libro nuevo en la misma instancia
y que copie todo.
Sólo se crear un nuevo libro con CreateObject que en mi caso no sirve...
Si solo me dijeras como escribir esta instruccion, y siguiendo el resto
de tu explicacion, ya podria terminar sola...



en tu segunda consulta comentaste lo siguiente:
"> Trate de incluir la instruccion <objeto_hoja>.Copy pero no funciona.
"> Debo estar haciendo algo mal porque me crea un nuevo libro.

o sea, que ya supiste "como" crear un libro nuevo (en la misma instancia
de excel), no ? (p.e.)
-> crear un libro nuevo con SOLO una copia "fiel" de la hoja que le
indiques...

- la hoja activa ? (sea cual sea el libro activo)
ActiveSheet.Copy

- la hoja activa del libro que contiene las macros ?
ThisWorkbook.ActiveSheet.Copy

- la hoja 5 (en su orden o posicion dentro) del libro que contiene las
macros ?
ThisWorkbook.Worksheets(5).Copy

- cual es la que necesitas copiar ?

saludos,
hector.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida