Visual Basic-关闭Excel仍会离开进程

时间:2018-10-31 10:28:59

标签: excel vb.net process

我创建了一些代码,以便在加载表单时从excel文件填充表单上的组合框。

作为代码的一部分,应该释放关联的对象,但不会释放

        Dim excel As New Excel.Application
    Dim w As Excel.Workbook = excel.Workbooks.Open("C:\Email Template\Violations Log\Violations Log.xlsx")
    Dim sheet As Excel.Worksheet = w.Worksheets("Individual Data")
    Dim r As Excel.Range = sheet.Range("A2:A300")
    Dim array(,) As Object = r.Value(excel.XlRangeValueDataType.xlRangeValueDefault)
    Dim sheet2 As Excel.Worksheet = w.Worksheets("Category")
    Dim s As Excel.Range = sheet2.Range("A2:A20")
    Dim array2(,) As Object = s.Value(excel.XlRangeValueDataType.xlRangeValueDefault)
    Dim bound0 As Integer = array.GetUpperBound(0)
    Dim bound1 As Integer = array.GetUpperBound(1)
    Dim j As Integer
    Dim x As Integer
    Dim s1 As String
    If array IsNot Nothing Then


        ' Loop over all elements.
        For j = 1 To bound0
            For x = 1 To bound1
                s1 = array(j, x)
                If s1 IsNot Nothing Then
                    If Not ComboBox1.Items.Contains(s1.ToString) Then
                        ComboBox1.Items.Add(s1.ToString)
                    End If
                End If
            Next
        Next
    End If

    If array IsNot Nothing Then
        ' Loop over all elements.
        For j = 1 To bound0
            For x = 1 To bound1
                s1 = array2(j, x)
                If s1 IsNot Nothing Then
                    If Not ComboBox2.Items.Contains(s1.ToString) Then
                        ComboBox2.Items.Add(s1.ToString)
                    End If
                End If
            Next
        Next
    End If
    w.Close(False)
    excel.Quit()

    ReleaseObject(excel.XlRangeValueDataType.xlRangeValueDefault)
    ReleaseObject(excel)
    ReleaseObject(array)
    ReleaseObject(array2)
    ReleaseObject(r)
    ReleaseObject(s)
    ReleaseObject(sheet)
    ReleaseObject(sheet2)
    ReleaseObject(w)
    ReleaseObject(bound0)
    ReleaseObject(bound1)
    ReleaseObject(j)
    ReleaseObject(x)
    ReleaseObject(s1)

我曾经尝试释放所引用的每个对象,但它仍然与excel文档有联系。

我错过了一个物体吗?还是更大的东西?

我还有另一个代码,可以将代码从表单复制到相同的excel文档,并且不会打开任何进程。 (我必须杀死通过加载表单而创建的excel过程,以便能够使用代码复制数据)

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

想通了。

代码将停止运行,并且无法完成代码的发布对象部分。 通过调试,我发现我收到一条错误消息,该消息已被静音。我解决了错误消息,现在可以正常运行了。

感谢您的帮助。