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

#1 Héctor Miguel
05/05/2008 - 05:29 | Informe spam
hola, Diana !

Mostrar la cita
- hay alguna razon "de peso" para que deba ser (precisamente) el rango A1:P10000 ?
(o se trata solo de un "estimado" de hasta donde podria haber informacion en la hoja activa) -?-

- p.e. la siguiente instruccion "crea" un libro nuevo con una copia "fiel" de la hoja que le indiques: <objeto_hoja>.Copy
(incluye formatos, alto/ancho de fila/columna, formulas, vinculos, objetos, macros en su modulo de codigo, etc. etc. etc.)

- o... si solo quieres pasar valores, luego de hacer la copia, puedes convertir todo a valores "estaticos"
(existen dos o mas tecnicas, solo asegurate de que dicha hoja NO tiene codigo en su modulo de clase, ni macros vinculadas)

- tampoco estoy muy seguro de que metodos funcionen (mejor/peor) cuando se utilizan medios de automatizacion (createobject)

asi que, si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el codigo expuesto __
Mostrar la cita
#2 Diana
05/05/2008 - 15:43 | Informe spam
Hola Héctor Miguel,

La idea de copiar sólo el rango A1:P10000 de la hoja activa es porque en el
rango AA1:AZ60 hay ciertas fórmulas que cargan algunos datos al área
A1:P10000. De todos modos no sería muy importante ya que asumo que el
ususario no va a "espiar" la hoja más allá del rango activo. La aplicación
sí tiene módulo de clase pero creo que te refieres a que el nuevo libro
creado no debe tener módulo de clase.
Traté de incluir la instrucción <objeto_hoja>.Copy pero no funciona. Debo
estar haciendo algo mal porque me crea un nuevo libro.
Cómo debería incluir esta instrucción para que copie la hoja activa de la
aplicación?
Gracias,
Diana


"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
#3 Héctor Miguel
05/05/2008 - 17:06 | Informe spam
hola, Diana !

__ 1 __
Mostrar la cita
1) luego de la "creacion" de un libro (nuevo) que contendria (solo) la hoja indicada por la instruccion: <objeto_hoja>.Copy
podrias convertir a valores (eliminando formulas pero) conservando formatos Y... eliminar las columnas/filas "sobrantes"

__ 2 __
Mostrar la cita
2) me refiero a que "la hoja" (que vas a copiar) NO debiera contener codigos en "su" modulo de clase (worksheet_change, etc.)
no a los modulos de clase que pudiera tener tu aplicacion (vb stand-alone ?, otra ?)

__ 3 __
Mostrar la cita
3) precisamente, "esa" es la intencion: crer un libro nuevo con (solo) la hoja que le indiques en "copia fiel" (formatos, etc.)
despues puedes "operar" la hoja (en el libro nuevo) segun tus necesidades (revisa el punto 1 anterior)

__ 3 __
Mostrar la cita
3) aqui me queda la duda (por el ejemplo que expusiste) de si vas a "crear" otra instancia de excel (un nuevo "createobject")
para "intercambiar" hojas con alguna instancia previa de excel donde ya hubieras establecido otro "createobject" -???-
ya que instancias separadas de una misma aplicacion (excel) no serian "comunicables" entre si (por medios de automatizacion)

si tienes algun detalle "en el tintero"... va siendo hora de exponerlo ;)
saludos,
hector.

Mostrar la cita
#4 Diana
05/05/2008 - 18:50 | Informe spam
Héctor Miguel,
Gracias por tu explicación. Mi problema es que no logro que me copie la hoja
activa luego de crear el objeto.
La hoja activa de la aplicación no tiene códigos en su módulo de clase.
Mi problema es que no sé cómo escribir la instrucción de que copie la hoja
activa de la aplicación 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 código Exportar() antes expuesto. Aquí se creó el nuevo
libro de excel que se llama Libro1 con la hoja 1 activa.
3. Cómo escribo la instrucción de que copie la hoja activa de la aplicación
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única. Lo que quiero lograr es que el usuario pueda copiar el informe
de la hoja activa a nuevo excel para poder trabajarlo.
5. Mi problema es que no logro escribir la instrucción dentro del código
expuesto para que copie la hoja activa y la pegue en la hoja 1 del libro 1
creado con CreateObject.
Como siempre muchas gracias por tu ayuda.
Diana







"Héctor Miguel" escribió en el mensaje
news:
Mostrar la cita
#5 Héctor Miguel
05/05/2008 - 20:43 | Informe spam
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 __
Mostrar la cita
Ads by Google
Search Busqueda sugerida