2016-06-28 80 views
0

我已經構建了一個將數據加載到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 

當書是不開放會發生什麼是正確的對話框可以通過圖示來繼續運行:

enter image description here

但隨後的Excel出現對話框,指出以下幾點:

'\\ netshareA \ C $ \用戶\皮特\桌面\ TestUnits \ Machines.xls' 正在使用中。稍後再試。

之後,它終於吹了,我有引用的行:

Dim xlOpenWB As Excel.Workbook = xlOpenItem.Workbooks.Open("\\netshareA\c$\Users\Pete\Desktop\TestUnits\Machines") 

enter image description here

我的邏輯是,我需要有一個Excel對象的打開實例,然後關閉實例爲了終止任何無意的運行過程。我實際上在另一個提交處理程序中打開工作簿,Excel對象和變量設置良好,但那不是我的問題。我怎樣才能順利確保工作簿對象在這裏關閉,因爲不拋出一個異常,它不是?

回答

0

多少修修補補左右之後,我發現我的問題是,到底是什麼 - 我沒有收出打開的文件流

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 

    fs.Close() 'This closes out the initially opened file stream for checking. 

Catch ex As Exception 
    Test = True 
End Try 

End Function 
End Module 

我終於回來到模塊,想知道是什麼如果我只是關閉並使用fs.Close(),它會發生這種情況。沒有更多的爆炸!希望這可以幫助可能會遇到類似文件流問題的其他人。

相關問題