我已經構建了一個將數據加載到Excel電子表格的VB.Net應用程序。該應用程序工作正常,但我添加了一個功能來測試工作簿是否打開,如果是,應用程序終止。否則,如果工作簿未打開,則用戶可以繼續填寫應用程序中的信息。我的問題是,當工作表未打開時,由於工作簿「以某種方式打開」,我的代碼被炸燬。我需要關閉任何進程,然後繼續。這裏是我的檢查代碼,如果工作簿是打開或不:關閉Excel工作簿如果測試打開返回錯誤
月1日,我的模塊,它設置了一個布爾檢查:
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 $ \用戶\皮特\桌面\ TestUnits \ Machines.xls' 正在使用中。稍後再試。
之後,它終於吹了,我有引用的行:
Dim xlOpenWB As Excel.Workbook = xlOpenItem.Workbooks.Open("\\netshareA\c$\Users\Pete\Desktop\TestUnits\Machines")
我的邏輯是,我需要有一個Excel對象的打開實例,然後關閉實例爲了終止任何無意的運行過程。我實際上在另一個提交處理程序中打開工作簿,Excel對象和變量設置良好,但那不是我的問題。我怎樣才能順利確保工作簿對象在這裏關閉,因爲不拋出一個異常,它不是?