Salve a tutti, sto facendo un programmino per la mia azienda che gestisca le timbrature dei dipendenti e l'attribuzione delle loro ore di lavoro alle varie commesse, facendo riferimento a dei dati contenuti in alcuni fogli excel, che vorrei venissero salvati e chiusi. Quanto al salvataggio tutto sembra funzionare, ma dal task manager vedo che i processi EXCEL.exe restano attivi. Sapete darmi un consiglio?!

codice:
Public Class Main
    Dim codice
    Dim ulter As Boolean = True
    Dim tick = 0
    Dim tick2 = 0
    Dim tick3 = 0
    Dim XLS_Cartel3 As New Microsoft.Office.Interop.Excel.Application()
    Dim aperto As Boolean = False
    Dim Indice As Integer = 1
    Dim passo As Integer = 0

    Private Sub Main_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing

        If aperto = True Then
            XLS_Cartel3.ActiveWorkbook.Save()
            XLS_Cartel3.Workbooks.Close()

        End If
    End Sub

    Private Sub Main_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        XLS_Cartel3.Workbooks.Open("C:\Cartel3")
        XLS_Cartel3.Worksheets(1).Select()
        aperto = True


        Me.TextBox3.Focus()
        Me.TextBox2.Enabled = False
        Me.TextBoxNome.Enabled = False
        Me.Timer2.Enabled = True
        Me.Timer2.Interval = 1000
        Me.Timer2.Start()
        Me.Timer3.Enabled = True
        Me.Timer3.Interval = 1000
       
    End Sub
    Private Sub Timer2_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        'gestione orologio del form
        Me.TextBox2.Text = Mid$(My.Computer.Clock.LocalTime, 12, 5)
    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        'gestione temporizzatore del form
        tick += 1
        If tick = 2 Then
            tick = 0
            Me.TextBox3.Text = Nothing
            Me.TextBox1.Text = Nothing
            Me.TextBoxNome.Text = Nothing
            Me.TextBox3.Enabled = True
            Me.TextBox1.Enabled = True
            Me.TextBox3.Focus()
        End If
    End Sub

    Private Sub Main_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
        Me.TextBox1.Location = New System.Drawing.Point(Me.Size.Width * 0.758, Me.Size.Height * 0.233)
        Me.TextBox1.Font = New Font(Font.FontFamily, Me.Size.Height * 0.087)
        Me.TextBox1.Size = New Size(Me.Size.Height * 0.173, 47)
        '
        Me.TextBox2.Location = New System.Drawing.Point(Me.Size.Width * 0.758, Me.Size.Height * 0.41)
        Me.TextBox2.Font = New Font(Font.FontFamily, Me.Size.Height * 0.0275)
        Me.TextBox2.Size = New Size(Me.Size.Height * 0.173, 20)

        Me.TextBox3.Location = New System.Drawing.Point(Me.Size.Width * 1.5, Me.Size.Height * 0.2)
        Me.TextBox3.Font = New Font(Font.FontFamily, Me.Size.Height * 0.0275)
        Me.TextBox3.Size = New Size(Me.Size.Height * 0.173, 20)

        Me.TextBoxNome.Location = New System.Drawing.Point(Me.Size.Width * 0.725, Me.Size.Height * 0.1)
        Me.TextBoxNome.Font = New Font(Font.FontFamily, Me.Size.Height * 0.025)
        Me.TextBoxNome.Size = New Size(Me.Size.Height * 0.42, 21)

        Me.Button1.Location = New System.Drawing.Point(Me.Size.Width * 0.84, Me.Size.Height * 0.5)
    End Sub
    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox3.TextChanged
        'routine memorizzazione codice dipendente e gestione timbrature

        Dim c As Integer
        Dim esc As Boolean




        If Me.TextBox3.Text.Length = 17 Then
            My.Computer.Audio.PlaySystemSound(System.Media.SystemSounds.Beep)
            TextBox1.Text = Mid$(Me.TextBox3.Text, 15, 2)
            codice = TextBox1.Text
            Form1.TextBox6.Text = codice
            c = 1
            esc = False
            Do
                If CInt(XLS_Cartel3.Cells(c, 6).value) = codice Then
                    TextBoxNome.Text = XLS_Cartel3.Cells(c, 14).value
                    esc = True
                Else
                    If XLS_Cartel3.Cells(c + 1, 6).value = 0 Then
                        esc = True
                    Else
                        c += 1
                    End If
                End If

            Loop Until esc = True
            Me.TextBox3.Enabled = False
            Me.TextBox1.Enabled = False
            Me.TextBoxNome.Enabled = False
            Me.Timer1.Enabled = True
            Me.Timer1.Interval = 1000
            Me.Timer1.Start()

            Timbratura(codice)

        End If
    End Sub
    Private Sub Timbratura(ByVal codice As Integer)
        'routine per aggiornamento del numero delle timbrature del dipendente
        Dim Escape = Nothing
        Dim ore As Integer
        Dim min As Integer
        Dim Result As MsgBoxResult



        ore = My.Computer.Clock.LocalTime.Hour
        min = My.Computer.Clock.LocalTime.Minute


        Do
            Escape = XLS_Cartel3.Cells(Indice + 1, 6).value
            If XLS_Cartel3.Cells(Indice, 6).value = codice Then


                'Incremento del numero di timbrature
                XLS_Cartel3.Cells(Indice, 7).value = XLS_Cartel3.Cells(Indice, 7).value + 1

                If XLS_Cartel3.Cells(Indice, 7).value = 1 Then
                    XLS_Cartel3.Cells(Indice, 8).value = ore & " : " & min


                ElseIf XLS_Cartel3.Cells(Indice, 7).value = 3 Then
                    Me.Timer3.Stop()
                    'MsgBox(tick3)
                    tick3 = 0
                    XLS_Cartel3.Cells(Indice, 10).value = ore & " : " & min
                    Me.Timer3.Start()
                    Me.Button1.Visible = False

                ElseIf XLS_Cartel3.Cells(Indice, 7).value = 5 Then
                    Me.Timer3.Stop()
                    'MsgBox(tick3)
                    tick3 = 0
                    XLS_Cartel3.Cells(Indice, 12).value = ore & " : " & min
                    Me.Timer3.Start()
                    Me.Button1.Visible = False
                ElseIf XLS_Cartel3.Cells(Indice, 7).value = 2 Then
                    Me.Timer3.Stop()

                    tick3 = 0
                    XLS_Cartel3.Cells(Indice, 9).value = ore & " : " & min
                    Me.Timer3.Start()
                    Me.Button1.Visible = True
                    passo = 9
                ElseIf XLS_Cartel3.Cells(Indice, 7).value = 4 Then
                    Me.Timer3.Stop()

                    tick3 = 0
                    XLS_Cartel3.Cells(Indice, 11).value = ore & " : " & min
                    'XLS.Cells(Indice, 11).value = "19 : 00"

                    Me.Timer3.Start()
                    Me.Button1.Visible = True
                    passo = 11
             
                ElseIf XLS_Cartel3.Cells(Indice, 7).value = 6 Then
                    Me.Timer3.Stop()

                    tick3 = 0
                    XLS_Cartel3.Cells(Indice, 13).value = ore & " : " & min
                    Me.Timer3.Start()
                    Me.Button1.Visible = True
                    passo = 13
                
                End If
                Exit Do
            ElseIf XLS_Cartel3.Cells(Indice, 6).value <> codice And Escape Is Nothing Then
                MsgBox("Numero Badge Inesistente", MsgBoxStyle.Critical, "Attenzione")
            End If
            Indice += 1
        Loop Until Escape Is Nothing



    End Sub

    Public Function Approx_Difetto(ByVal minuti As Integer)
        'routine per l'approssimazione in difetto(al quarto d'ora precedente)della timbratura

        If minuti > 0 And minuti <= 15 Then
            minuti = 0
        ElseIf minuti > 15 And minuti <= 30 Then
            minuti = 15
        ElseIf minuti > 30 And minuti <= 45 Then
            minuti = 30
        ElseIf minuti > 45 And minuti <= 59 Then
            minuti = 45
        End If

        Return (minuti)
    End Function

    Private Sub Timer3_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        tick3 += 1
    End Sub
    Private Sub calcolo_ore_lavoro(ByVal indice)
        Dim ah, bh, ch, am, bm, cm As Integer
        Dim th, tm As Integer
        Dim zm As Double
        Dim pizm, Approx As Integer



        ah = Mid$(XLS_Cartel3.Cells(indice, 9).value, 1, 2) - Mid$(XLS_Cartel3.Cells(indice, 8).value, 1, 2)
        th = ah

        If passo = 11 Then

            bh = Mid$(XLS_Cartel3.Cells(indice, 11).value, 1, 2) - Mid$(XLS_Cartel3.Cells(indice, 10).value, 1, 2)
            th = ah + bh

        ElseIf passo = 13 Then

            ch = Mid$(XLS_Cartel3.Cells(indice, 13).value, 1, 2) - Mid$(XLS_Cartel3.Cells(indice, 12).value, 1, 2)
            th = ah + bh + ch

        End If



        If Mid$(XLS_Cartel3.Cells(indice, 9).value, 5, 2) < Mid$(XLS_Cartel3.Cells(indice, 8).value, 5, 2) Then
            am = 60 + Mid$(XLS_Cartel3.Cells(indice, 9).value, 5, 2) - Mid$(XLS_Cartel3.Cells(indice, 8).value, 5, 2)
            th = th - 1
        Else

            am = Mid$(XLS_Cartel3.Cells(indice, 9).value, 5, 2) - Mid$(XLS_Cartel3.Cells(indice, 8).value, 5, 2)
        End If
        tm = am

        If passo = 11 Then

            If Mid$(XLS_Cartel3.Cells(indice, 11).value, 5, 2) < Mid$(XLS_Cartel3.Cells(indice, 10).value, 5, 2) Then
                bm = 60 + Mid$(XLS_Cartel3.Cells(indice, 11).value, 5, 2) - Mid$(XLS_Cartel3.Cells(indice, 10).value, 5, 2)
                th = th - 1
            Else
                bm = Mid$(XLS_Cartel3.Cells(indice, 11).value, 5, 2) - Mid$(XLS_Cartel3.Cells(indice, 10).value, 5, 2)
            End If
            tm = am + bm

        ElseIf passo = 13 Then
            If Mid$(XLS_Cartel3.Cells(indice, 13).value, 5, 2) < Mid$(XLS_Cartel3.Cells(indice, 12).value, 5, 2) Then
                cm = 60 + Mid$(XLS_Cartel3.Cells(indice, 13).value, 5, 2) - Mid$(XLS_Cartel3.Cells(indice, 12).value, 5, 2)
                th = th - 1
            Else
                cm = Mid$(XLS_Cartel3.Cells(indice, 13).value, 5, 2) - Mid$(XLS_Cartel3.Cells(indice, 12).value, 5, 2)
            End If

            tm = am + bm + cm

        End If


        zm = tm / 60
        pizm = Int(zm)

        th = th + pizm
        tm = tm - 60 * pizm

        Approx = Approx_Difetto(tm)
        tm = Approx
        Form1.TextBox7.Text = th
        Form1.TextBox8.Text = tm
        Form1.TextBox9.Text = XLS_Cartel3.Cells(indice, 5).value

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Me.Timer1.Stop()
        Me.Timer3.Stop()
        ulter = False

        calcolo_ore_lavoro(Indice)

        'azzera timbrature 
        For passo = 7 To 13
            XLS_Cartel3.Cells(Indice, passo) = Nothing
        Next
        XLS_Cartel3.ActiveWorkbook.Save()
        XLS_Cartel3.Workbooks.Close()
        aperto = False

        Form2.Show()
        Form1.Show()
        Me.Button1.Visible = False
        Me.Hide()



    End Sub


End Class