Я создал приложение VB.Net, которое загружает данные в электронную таблицу Excel. Приложение работает отлично, но я добавил функциональность, чтобы проверить, является ли рабочая книга открытой, и если это так, приложение завершается. В противном случае, если рабочая книга не открыта, пользователь может продолжить заполнять информацию в приложении. Моя проблема в том, что когда рабочий лист не открыт, мой код взрывается из-за того, что рабочая книга «как-то открыта». Мне нужно закрыть любые процессы, а затем продолжить. Вот мой код для проверки, если книга открыта или нет:Закройте книгу Excel, если Test for Open Returns False
первых, мой модуль, который устанавливает логическую проверку:
Public Module ExcelCheck
Public Function Test(ByRef sName As String) As Boolean
Dim fs As FileStream
Try
fs = File.Open(sName, FileMode.Open, FileAccess.Read, FileShare.None)
Test = False
Catch ex As Exception
Test = True
End Try
End Function
End Module
Тогда мой обработчик для кнопки на форме, которая делает проверку :
Private Sub btnOpenFileCheck_Click(sender As Object, e As EventArgs) Handles btnOpenFileCheck.Click
'Evaluate if the workbook is being used:
Dim bExist As Boolean
bExist = Test("\\netshareA\c$\Users\Pete\Desktop\TestUnits\Machines.xls")
If bExist = True Then
MessageBox.Show("The file is open... Please try again later.", "EXCEL FILE IN USE: Abort", MessageBoxButtons.OK)
Me.Close()
Else bExist = False
MessageBox.Show("The file is NOT open... You may proceed...", "EXCEL FILE NOT OPEN", MessageBoxButtons.OK)
Dim xlOpenItem As New Excel.Application
Dim xlOpenWB As Excel.Workbook = xlOpenItem.Workbooks.Open("\\netshareA\c$\Users\Pete\Desktop\TestUnits\Machines")
xlOpenWB.Close(SaveChanges:=False, Filename:="\\netshareA\c$\Users\Pete\Desktop\TestUnits\Machines.xls", RouteWorkbook:=False)
txtCPUSerial.Focus()
End If
End Sub
Что происходит, когда книга не открыта является собственно диалог продолжать прогонов с помощью иллюстрации:
Но тогда диалог Excel появляется говоря следующее:
'\\ netshareA \ C $ \ Users \ Pete \ Desktop \ TestUnits \ Machines.xls' в настоящее время используется. Попробуйте позже.
Затем, он, наконец, взрывается, и у меня есть строка ссылка:
Dim xlOpenWB As Excel.Workbook = xlOpenItem.Workbooks.Open("\\netshareA\c$\Users\Pete\Desktop\TestUnits\Machines")
Моя логика такова, что мне нужно иметь открытый экземпляр объекта Excel, то близко, что чтобы прервать любой непреднамеренный текущий процесс. Я действительно открываю книгу в другом обработчике отправки, при этом объекты Excel и переменные задаются хорошо, но это не моя проблема. Как можно плавно убедитесь, что объект рабочей книги закрыт здесь, чтобы исключить исключение, которое не является?