Visual Basic - закрытие Excel по-прежнему оставляет процессы - PullRequest
0 голосов
/ 31 октября 2018

Я создал некоторый код для заполнения полей со списком в моей форме из файла 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 голосов
/ 01 ноября 2018

Разобрался.

Код перестанет работать и не завершит раздел кода объекта освобождения. Используя отладку, я обнаружил, что получаю сообщение об ошибке, которое было отключено. Я решил сообщение об ошибке, и теперь оно работает нормально.

Спасибо за попытку помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...