• Domingo 22 de Diciembre de 2024, 18:34

Autor Tema:  Matar Excel.exe  (Leído 5243 veces)

Jeremy

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Matar Excel.exe
« en: Martes 13 de Julio de 2004, 12:59 »
0
Hola amig@s. Tengo el siguiente problema el cual espero puedan ayudarme a resolver:

Desde un form en VB hago una exportación a Excel. La primera exportación la hace bien, sin problemas. Si yo cierro el Excel, me he dado cuenta que el fichero EXCEL.EXE se queda residente en memoria; lo he visto a través del ADMINISTRADOR DE TAREAS de WIN2000/WINXP. Cómo hago para quitar ese archivo del administrador de tareas desde VB??

Y es que cuando hago la primera exportación a Excel, no tengo ningún problema, es a partir de la segunda exportación cuando el Excel ya no responde, y esto supongo es por el motivo que les indico anteriormente; que el EXCEL.EXE se queda en memoria.

De antemano, gracias a tod@s

º¿º :lol:
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."

sujey_sanchez

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Matar Excel.exe
« Respuesta #1 en: Martes 13 de Julio de 2004, 15:37 »
0
Jeremy, todo depende de que tipo de conexion que estas haciendo con Excel en visual basic, el cual debes cerrar o liberarlo para que excel tome el mando, a continuacion te doy un ejemplo a ver que tal....

'En el Modulo
Private objExcel As Excel.Application

'En la Forma
  'Coloca el puntero del mouse en reloj
    Me.MousePointer = 11
 
  'Se abre la secion de Excel  
    Set objExcel = New Excel.Application
     
   'Conexion con base de datos
      ..........
   'AQUI SE COLOCARIA TUS PROCEDIMIENTOS Y TODO LO QUE EXPORTES
      ..........

   objExcel.SheetsInNewWorkbook = NumHojasExcel 'decimos No. de hojas  
   objExcel.Workbooks.Add                         'añadimos el objeto al workbook

   objExcel.Visible = True 'hacemos visible el excel cuando ya halla cargado todo
   
   'Se cierra la secion en visual        
     Set objExcel = Nothing  'descargamos el objeto
     
   'Coloca el puntero del mouse en flecha
      Me.MousePointer = 0
Sujey

Jeremy

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Matar Excel.exe
« Respuesta #2 en: Martes 13 de Julio de 2004, 18:02 »
0
Hola Sujey_sanchez, gracias por tu ayuda, aunque el código que tengo incluye la línea:
Código: Text
  1.  
  2. Set objExcel = Nothing 'descargamos el objeto
  3.  
  4.  

Con eso supuestamente quito el Excel de memoria, pero sólo se quita de memoria cuando cierro el programa que he hecho en VB.

Si tienes alguna otra idea de cómo quitar el Excel, te lo agracedería mucho

Un saludo,


Jeremy º¿º
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."

sujey_sanchez

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Matar Excel.exe
« Respuesta #3 en: Martes 13 de Julio de 2004, 18:44 »
0
Jeremy
   Al decir Set objExcel = Nothing , tan solo estas cerrando la sesion de visual basic sobre el objeto que referenciaste para Excel, mas no estas cerrando excel.
  Por lo que entiendo, la exportacion que haces no deseas que se vea y se manipule por el usuario, tan solo deseas exportar, quizas guardar y cerrar...Es lo que entiendo en cuanto al procedimiento que has hecho..
  Para cerrar la sesion de Excel sin interaccion alguna del usuario tan solo coloca el Quit al objeto que declaraste en visual Basic.

Por ejemplo: Declara una variable boolean y activala cuando levantes excel, luego

 If tbExcelEjecutandose = False Then
     toExcel.Application.Quit
  Else
     toExcel.Close
 End If

En la ayuda MSDN conseguiras un ejemplo completo de todo esto...es el codigo q te copio a continuacion tal cual esta en la ayuda...

' Declara las rutinas API necesarias:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
               ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long _
               ByVal wParam as Long _
               ByVal lParam As Long) As Long

Sub GetExcel()
   Dim MiXL As Object   ' Variable que contiene la referencia
                        ' a Microsoft Excel.
   Dim ExcelNoSeEjecutaba As Boolean   ' Indicador para liberación final .

' Prueba para ver si hay una copia de Microsoft Excel ejecutándose.
   On Error Resume Next   ' Difiere la interceptación de errores.
' La llamada a la función Getobject sin el primer argumento devuelve una
' referencia a una instancia de la aplicación. Si no se está ejecutando
' se produce un error.
   Set MiXL = Getobject(, "Excel.Application")
   If Err.Number <> 0 Then ExcelNoSeEjecutaba = True
   Err.Clear   ' Borra el objeto Err si se produce un error.

' Comprueba Microsoft Excel. Si se está ejecutando Microsoft Excel,
' lo introduce en la tabla Running Object.
   DetectExcel

' Establece la variable de objeto para hacer referencia al archivo que desea ver.
   Set MiXL = GetObject("c:\vb4\MIPRUEBA.XLS")

' Muestra Microsoft Excel mediante su propiedad Application. Después
' muestra la ventana real que contiene el archivo mediante
' la colección Windows de la referencia de objeto MiXL.
   MiXL.Application.Visible = True
   MiXL.Parent.Windows(1).Visible = True
   ' Hace manipulaciones de su archivo aquí.
   ' ...
' Si no se está ejecutando esta copia de Microsoft Excel cuando
' comenzó, ciérrela con el método Quit de la propiedad Application.
' Observe que cuando intenta salir de Microsoft Excel, la barra de título
' parpadea y muestra el mensaje
' preguntándole si desea guardar los archivos cargados.
   If ExcelNoSeEjecutaba = True Then
      MiXL.Application.Quit
   End IF

   Set MiXL = Nothing   ' Libera la referencia a la
                        ' aplicación y a la hoja de cálculo.
End Sub

Sub DetectExcel()
' El procedimiento detecta que Excel está en ejecución y lo registra.
   Const WM_USER = 1024
   Dim hWnd As Long
' Si se está ejecutando Excel, esta llamada a la API devuelve el controlador.
   hWnd = FindWindow("XLMAIN", 0)
   If hWnd = 0 Then   ' 0 quiere decir que Excel no se está ejecutando .
      Exit Sub
   Else            
   ' Excel se está ejecutando, por lo que se utiliza la función SendMessage de la API
   ' para introducirlo en la tabla Running Object.
      SendMessage hWnd, WM_USER + 18, 0, 0
   End If
End Sub
Sujey

Anderea

  • Miembro activo
  • **
  • Mensajes: 49
    • Ver Perfil
Re: Matar Excel.exe
« Respuesta #4 en: Viernes 16 de Julio de 2004, 17:46 »
0
Hola Jeremy, yo tengo el mismo problema.
Intenté todo lo que recomendó Sujey y no me sirvió
Si hayas la forma de hacerlo por favor súla al foro.

Hola Sujey, tengo el mismo problema que Jeremy. No creo que lo que él quiere es que se le cierre el archivo de excel. Sino el problema es que aunque se cierre no se puede abrir nuevamente un excel hasta que se haya cerrado la aplicación que hizo la conección. Con el ejemplo que mandaste se cirra el excel, pero el problema persiste.
Si tienes otra idea te agradeceremos tu ayuda