Visual Basic.NET - Abrir y cerrar Excel desde visual basic

 
Vista:
sin imagen de perfil

Abrir y cerrar Excel desde visual basic

Publicado por Daniel (18 intervenciones) el 11/02/2017 21:39:48
Buenas noches,

Estoy utilizando un libro de excel en un programa de visual basic.

Puedo abrirlo y trabajar con el sin problemas, el problema aparece cuando lo intento cerrar, ya que no me cierra el libro.

Muestro el código que utilizo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
'Modulo para cerrar el excel.
 
Module ModuleCerrarExcel
 
    Public Sub CerrarExcel()
        oExcel.DisplayAlerts = False
        oBook.Save()
 
        'oBook.SaveAs(filetest, 51) '51 es xlsx / 1 es xls
        oBook = Nothing
        oSheet = Nothing
 
        '   oBook.Close()
        oExcel.Quit()
 
        releaseObject(oSheet)
 
        releaseObject(oExcel)
 
 
    End Sub
    Private Sub releaseObject(ByVal obj As Object)
        ' Necesario para que el Excel se cierre, ya que con oExcel.Quit() puede no cerrarse.
        Try
            System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
            obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
        End Try
    End Sub
 
End Module
 
'Cierro el excel desde el boton X del propio form.
Imports System.Data
Imports System.IO
Imports Excel = Microsoft.Office.Interop.Excel
 
Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
 
        Me.Hide()
        ModuleCerrarExcel.CerrarExcel()
    End Sub
 
 
Cuando cierro me sale:
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
Excepción producida: 'System.NullReferenceException' en mscorlib.dll
Información adicional: Referencia a objeto no establecida como instancia de un objeto.
 
Y si quito de comentario "oBook.Close()"
me sale Excepción producida: 'System.NullReferenceException' en Programa Prog.exe
Información adicional: Referencia a objeto no establecida como instancia de un objeto.
El modulo que utilizo para abrir es este:
 
Imports System.Data
Imports System.IO
Imports Excel = Microsoft.Office.Interop.Excel
Module ModuleAbrirExcel
 
    Public filetest As String = "C:\Desktop\\Excel.xlsx"
    ' Public oExcel As Object
    'Hoja Entradas y salidas
 
    Public oExcel As New Excel.Application
    Public oBook As Microsoft.Office.Interop.Excel.Workbook
    Public oSheet As Microsoft.Office.Interop.Excel.Worksheet
 
    Public Sub AbrirExcel()
        oExcel = CreateObject("Excel.Application")
        oExcel.Workbooks.Open(filetest)
        oBook = oExcel.ActiveWorkbook
        oSheet = oExcel.Worksheets(1)
 
    End Sub
End Module

Muchas gracias de antemano.

Un saludo

Daniel.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Diego
Val: 605
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Abrir y cerrar Excel desde visual basic

Publicado por Diego (190 intervenciones) el 12/02/2017 01:48:34
Hola Daniel, probá definir la variable obj de la funcion ReleaseObject, utilizando ByRef, asi cerras el objeto real y no una copia de el.
De cualquier forma creo que, haciendo oSheet = nothing y luego queriendo hacer un release, puede darte un error.

Saludos y +Bytes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Abrir y cerrar Excel desde visual basic

Publicado por Daniel (18 intervenciones) el 12/02/2017 17:54:18
Buenas,

He probado lo que me comentas.

Ahora me da error aqui: (No se muy bien para que se usa, esto lo puse porque en un ejemplo estaba)

oExcel.DisplayAlerts = False


Lo que estoy pensando es, ¿no podría usar el Excel igual que uso Access? Es decir, tengo una base de datos en Access y cuando inicio el programa, no me aparece en el admin de tareas el Access abierto, podría hacer lo mismo con el Excel?

Si en vez de guardar, quisiera descartar los cambios y que se cerrase, podría hacerlo? Ya que no me sirve de nada que se guarde lo que hago en el excel.

Gracias.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar