Не удается правильно закрыть приложение Excel - PullRequest
0 голосов
/ 12 апреля 2020

Я очень новичок в VB. net, и я пытаюсь шаг за шагом приступить к моему заявлению. Приложение, которое я пытаюсь создать, соберет серию макросов, которые я написал в среде Excel VBA. Теперь следующий код, вставленный ниже, является начальной частью, где я в основном пытаюсь загрузить рабочую книгу (которая будет использоваться в качестве активной рабочей книги) и «выгрузить ее». Проблема возникает, когда после «выгрузки» рабочей книги я пытаюсь открыть ту же самую рабочую книгу в Excel. Приложение Excel возвращает ошибку «Открыть только для чтения». Это не может быть принято, и мне нужно понять, как выгрузить рабочую книгу и выпустить ее из myAPP.

Imports Excel = Microsoft.Office.Interop.Excel

Public Class Form1
    Dim workbook As Excel.Workbook
    Dim worksheet As Excel.Worksheet
    Dim APP As New Excel.Application

Private Sub opn_btn_Click(sender As Object, e As EventArgs) Handles opn_btn.Click
    Dim strname As String
    Dim cellname As String

    With OpenFileDialog1
        .InitialDirectory = "E:\Vs_Excel"
        .Title = "Open xlsx file"
        .ShowDialog()
    End With

    workbook = APP.Workbooks.Open(OpenFileDialog1.FileName)
    worksheet = workbook.Worksheets("sheet1")
    cellname = worksheet.Range("A1").Value

    strname = OpenFileDialog1.FileName
    Me.TextBox1.Text = strname
    Me.TextBox2.Text = cellname

    Dim lvwReport As View = View.List
    With Me.ListView1
        .GridLines = True
        .View = lvwReport
        .CheckBoxes = True
    End With

    'LoadListView() 'thi sroutine is written but not used yet. Must solve first the problem wioth closing ExcelApplication

End Sub


Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    workbook.Close()
    APP.Quit()

    Me.TextBox1.Text = ""
    Me.TextBox2.Text = ""

    ReleaseObject(worksheet)
    worksheet = Nothing
    ReleaseObject(workbook)
    workbook = Nothing
    ReleaseObject(APP)
    APP = Nothing

End Sub
Private Sub ReleaseObject(ByVal obj As Object)
    Try
        Dim intRel As Integer = 0
        Do
            intRel = System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)
        Loop While intRel > 0
        MsgBox("Final Released obj # " & intRel)
    Catch ex As Exception
        MsgBox("Error releasing object" & ex.ToString)
        obj = Nothing
    Finally
        GC.Collect()
    End Try
End Sub
End class
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...