Problema con chiusura Excel

di il
4 risposte

Problema con chiusura Excel

Ho un problema riguardo l'interazione con Excel e l'IA non mi dà una mano. Ho un programma che qui ho ridotto ai minimi termini che non mi chiude Excel una volta fatto quello che dovrebbe. Di seguito il codice, grazie per chi mi può aiutare:

    Private Sub Command1_Click(sender As Object, e As EventArgs) Handles Command1.Click
       Dim nn_est, nn_int As Excel.Range
       Dim strTipo As Excel.Range
       Dim percorso As String = Text1.Text
       Dim oFoglioTempSh, oFoglioUT As Excel.Worksheet
       Dim oRng, oRng2 As Excel.Range
       Dim oExc As New Excel.Application()
       Dim oTempi As Excel.Workbook = oExc.Workbooks.Open(percorso)
       Dim TROVATO As String = ""
       Dim NumFoglio As Integer = oTempi.Sheets.Count
       For f As Integer = 1 To NumFoglio
           Dim NomeFoglio As String = oTempi.Worksheets(f).Name
           If NomeFoglio = "utensili_CBF" Then
               TROVATO = "OK"
           End If
       Next
       If TROVATO <> "OK" Then
           MessageBox.Show("MANCA IL FOGLIO utensili_CBF")
           GoTo salta
       End If
salta:
       oTempi.Close(False) ' Chiude il workbook senza salvare le modifiche
       oExc.Quit() ' Chiude l'applicazione Excel
       ' Rilascia le risorse
       System.Runtime.InteropServices.Marshal.ReleaseComObject(oTempi)
       System.Runtime.InteropServices.Marshal.ReleaseComObject(oExc)
       oFoglioTempSh = Nothing
       oFoglioUT = Nothing
       oTempi = Nothing
       percorso = ""
       oExc = Nothing
   End Sub

4 Risposte

  • Re: Problema con chiusura Excel

    Codice rivisto, corretto, integrato

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
       Dim percorso As String = "...."
       Dim Trovato As Boolean = False
       Dim oExc As New Excel.Application()
       Dim oTempi As Excel.Workbook = oExc.Workbooks.Open(percorso)
       Dim TotFogli As Integer = oTempi.Sheets.Count
       For f As Integer = 1 To TotFogli
           If oTempi.Worksheets(f).Name = "utensili_CBF" Then
               Trovato = True
               Exit For
           End If
       Next
       If Not Trovato Then
           MessageBox.Show("MANCA IL FOGLIO utensili_CBF")
       End If
       oTempi.Close(False)
       oExc.Quit()
       releaseObject(oTempi)
       releaseObject(oExc)
    End Sub
    Private Sub releaseObject(ByVal obj As Object)
       Try
           System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
           obj = Nothing
       Catch ex As Exception
           obj = Nothing
       Finally
           GC.Collect()
       End Try
    End Sub
  • Re: Problema con chiusura Excel

    Grazie per la risposta. Ho provato, ma non ha funzionato. 

    Ho fatto una prova ai minimi termini, se apro solo l'app senza aprire il foglio, poi riesco a chiudere. Se apro anche un foglio, non riesco a chiudere. 

    Ho provato a cambiare file e a salvarlo con nome in xlsm (da xls), ma niente! Il codice sottostante è con l'attivazione del foglio “oTempi”, se commento tutto ciò che riguarda “oTempi” funziona :-(

    Forse è un problema di installazione VB.net? è la prima volta che lavoro con Excel in VB.net…

    Option Strict Off
    Option Explicit On
    Imports Excel = Microsoft.Office.Interop.Excel
    Imports Microsoft.VisualBasic
    Imports System
    Imports System.Drawing
    Imports System.Windows.Forms
    Imports System.Text
    Imports System.Runtime.InteropServices
    Imports System.IO
    Partial Friend Class Form1
         Private Sub Command1_Click(sender As Object, e As EventArgs) Handles Command1.Click
          Dim percorso As String = Text1.Text
          Dim oExc As New Excel.Application()
          Dim oTempi As Excel.Workbook = oExc.Workbooks.Open(percorso)
           oTempi.Close(False)
          oExc.Quit()
          releaseObject(oTempi)
          releaseObject(oExc)
          Image1.Visible = False
          Command3_Click(Command3, New EventArgs())
      End Sub
      Private Sub releaseObject(ByVal obj As Object)
          Try
              System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
              obj = Nothing
          Catch ex As Exception
              obj = Nothing
          Finally
              GC.Collect()
          End Try
      End Sub
      End Class
    
  • Re: Problema con chiusura Excel

    Ho trovato! alla chiusura dell'app c'era il codice che impediva la chiusura Excel perché tagliava tutto senza dare il tempo della chiusura normale :

            Environment.Exit(0)
  • Re: Problema con chiusura Excel

    Il codice che ti avevo indicato funzionava perfettamente.

    Ovviamente se lo cambi o ne aggiungi altro…

Devi accedere o registrarti per scrivere nel forum
4 risposte