Resumen Acceso a Excel desde VB5   (2 mensajes )

PREGUNTA
------------------
¿Alguien sabe la forma correcta de abrir una hoja de calculo Excel utilizando Automatización OLE y que si ya hay una instancia de Excel ejecutandose agrege esta hoja a esa instancia y si no cree un objeto Excel?

En cualquiera de los dos casos (que exista una instancia de Excel o no) ¿como borrar del todo la instancia creada o la hoja añadida?
----------------------------------------------------------------------------


RESPUESTA
--------------------


AUTOMATIZACIÓN DE UNA APLICACIÓN
-------------------------------------------------------------

 Voy a usar los componentes de EXCEL para hacer las típicas operaciones que hago en el propio EXCEL, pero desde mi aplicación.

 El modelo de objetos de EXCEL está en la ayuda de EXCEL y se busca Object Model.

 Arrancaré un objeto Application y con el objeto Workbook podré grabar, abrir, ...

 En la ayuda de EXCEL, los objetos que tengan una (s) es que además de objetos son colecciones.

 Worksheet es una hoja de cálculo, (s) es la colección de las hojas del libro.

 Range es un rango de celdas.

 Chart es el objeto para acceder a un gráfico, y es también una colección.

 Los nombres entre comillas que no sean palabras serán nombres de ficheros "earn.xls"
o de hojas o de celdas dentro del archivo xls (Earnigs, ...)



 Ejemplo:

 Dim xl As Excel.Application

 ‘Para levantar el objeto: (Así levanto EXCEL. Lo veo en el Task Manager en NT)
 Set xl = CreateObject(“Excel.Application”)

 ‘Para ver el objeto que está en background, pongo la propiedad visible a true
 ‘y además lo ejecuto en primer plano
 xl.visible = True

 ‘Para abrir un archivo: Con Open añado el archivo a la colección
 xl.Workbooks.Open App.Path & “\earn.xls”


NOTA: Puedo saber si un objeto tiene algo con:

If (xl is Nothing) ...


 Vamos a pasar cosas a las casillas:

 xl.Worksheets(“Earnings”).Activate ‘Activo la hoja Earnings (la pongo encima).

 Earnings: Es el nombre de la hoja de cálculo
 xl.Worksheets(“Earnings”).Range(“Growth”).Value = txtGrowth.Text
 xl.Worksheets(“Earnings”).Range(“Inflation”).Value = txt Inflation.Text

 Growth: Es el nombre de una celda
 Inflation: Es el nombre de otra celda


NOTA: Para acceder a un rango, podríamos poner los valores en una matriz:

... Range(“C3”,”C8”) ...

y esto hace referencia al rango C3:C8.



Crear un gráfico:

‘Selecciono el rango para el gráfico.
xl.worksheets(“Earnings”).Range(“net.profit”).Select

‘Añado el gráfico a la colección.
Dim xlChart As Chart ‘(o ChartArea)
Set xlChart = xl.Charts.Add()

‘Doy el tipo
xl.Chart.Type = xl3Dcolumn ‘xl3Dcolumn es una cte. de EXCEL

Además de crearlo, así aparece.


NOTA: En algunos casos en conveniente verificar:

 if xl is Nothing then
  ..........
 else
  xl.Activate
 end if


Para salir:

 if not xl is Nothing then
  xl.Activeworkbook.Close SaveChanges := False
  xl.Quit
  Set xlChart = Nothing
  Set xl = Nothing
 end if

 El SaveChanges := False es para pasar parámetros.


Espero haberte ayudado.

Un saludo...

==================================
Si puede imaginarse, puede progarmarse.
Ramón Egido.
ramon.egido@adecco.es
Programador Senior.
InterActive Development Studio, S.L.

>yo quiero es .
>
>Abrir el libro
>Buscar una hoja "HOJAn"
>Si no existe coger la hoja "HOJAn-1" y copiarla al final
>Escribir los datos
>guardar el libro

Puedes emplear un procedimiento similar al que te envío. A este se le pasa
el número de hoja en la que quieres escribir (N), busca la HojaN (se supone
que es la última) y si no existe copia la ultima que tenga como HojaN.
Luego escribe datos en la hoja.

Sub GrabaHoja(NumHoja As Long)
Dim xl As Excel.Application
Dim hoja As Excel.Worksheet
Dim strUltHoja As String
Dim i As Long

'supongo que tengo un libro con las hojas llamadas Hoja1, Hoja2 ...,
'que en NumHoja tengo el nº de la hoja a modificar,
'y que sólo escribo en la última y no hay vacías por el medio


'cargar excel
Set xl = New Excel.Application
'abrir el libro
xl.Workbooks.Open App.Path + "\libro1.xls"
'accedo a la ultima hoja
Set hoja = xl.ActiveWorkbook.Worksheets(xl.ActiveWorkbook.Worksheets.Count)
'si la última hoja no es la que busco, la copio otra vez en ultimo lugar
If hoja.Name <> "Hoja" & NumHoja Then
    'copio la hoja al final
    hoja.Copy after:=hoja
    'la selecciono
    Set hoja =
xl.ActiveWorkbook.Worksheets(xl.ActiveWorkbook.Worksheets.Count)
    'le cambio el nombre
    hoja.Name = "Hoja" & NumHoja
End If
'escribo los datos que necesito
hoja.Range("A2").Value = "MiDato"
hoja.Range("A3").Value = 25518
hoja.Range("A4").Value = "10/25/1999" ' mm/dd/yyyy
Set hoja = Nothing
'grabo el libro dejando la última hoja activa
xl.ActiveWorkbook.Save
'cierro el libro
xl.ActiveWorkbook.Close
'cierro excel
xl.Quit
Set xl = Nothing
End Sub



Un saludo.

_________________________________________________
José Rubí de la Vega
E-mail : jrubi@arrakis.es
WWW : http://www.arrakis.es/~jrubi
Podrás encontrar información sobre VB, la lista
VB-ESP y un resumen de los mensajes de la misma




Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com