2013-03-20 58 views
0

我正打算在打開的工作簿中調用第5張表。當我打開從程序工作簿我似乎能夠做到這一點:來自WorkBook的調用表

Dim CurrentRun As New Excel.Application 
Dim CurrentBook As Excel.Workbook 
Dim CurrentSheet As Excel.Worksheet 


Private Sub GeneralButtonOpener_Click(sender As Object, e As EventArgs) Handles GeneralButtonOpener.Click 

    CurrentRun.Visible = True 
    CurrentBook = CurrentRun.Workbooks.Add(MainTemplatePath) 
    CurrentSheet = CurrentBook.Worksheets(4) 
    CurrentSheet.Activate() 

End Sub 

但是我所有的努力在調用表,如果該文件已經打開失敗:

Dim CurrentRun As Microsoft.Office.Interop.Excel.Application 
    Dim CurrentBook As Microsoft.Office.Interop.Excel.Workbook 
    Dim CurrentSheet As Microsoft.Office.Interop.Excel.Worksheet 

    CurrentRun = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") 
    CurrentBook = CurrentRun.Workbooks 
    CurrentSheet = CurrentBook.Sheets(4) 
    CurrentSheet.Activate() 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Dim CurrentRun As Microsoft.Office.Interop.Excel.Application 
    Dim CurrentBook As Excel.Workbook 
    Dim CurrentSheet As Excel.Worksheet 

    CurrentRun = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") 
    CurrentBook = CurrentRun.ActiveWorkbook 
    CurrentSheet = CurrentBook.Sheets(4) 
    CurrentSheet.Activate() 
End Sub 

我看了幾個例子,但我不知道我要去哪裏錯了。這令我感到驚訝,因爲在這個問題上似乎有很多問題。以太指示解決/解決這個問題的地方,或者我特別做錯的東西,將不勝感激。

謝謝!

+0

你是什麼意思 「失敗」。你的意思是應用程序似乎忽略了你,或者你的意思是它會拋出異常? – JDB 2013-03-20 21:33:09

+0

@ Cyborgx37他們似乎都無視我/什麼都不做。如果我得到一個異常,我會發布它。我嘗試過使用它,如果我做一些愚蠢的事情,比如試圖放置太大的索引(90),我可以擺脫索引錯誤。工作簿本身有10張,所以這不應該是一個問題。 – 2013-03-21 01:25:32

+0

@ Cyborgx37進一步調試,如果我根本沒有打開工作表並且使用裝載了excel的標準書(並刪除索引或添加工作表),我得到以下異常:'無法投射類型爲'的COM對象' System .__ ComObject'改爲接口類型'Microsoft.Office.Interop.Excel.Workbook'。此操作失敗,因爲IID爲「{000208DA-0000-0000-C000-000000000046}」的接口的COM組件上的QueryInterface調用由於以下錯誤而失敗:沒有此類接口支持(異常來自HRESULT:0x80004002(E_NOINTERFACE)) .' – 2013-03-21 01:38:19

回答

0

令我驚訝的是,我發現我實際上有幾十個在後臺運行的Excel實例。當我正在調試時,啓動COM,第一個Excel實例啓動。第二個是在打開窗體窗體(加載項的主要部分)時開始的。

我不知道的是,當拋出一個異常時,我停止了Visual Studio中的事情,只關閉了第一個Excel實例。我有試圖清理Excel打開的應用程序的代碼,但當然由於引發異常而沒有達到。

在這裏,我一直在想我會把事情稍微發展一點的時候,處理一些錯誤。很明顯,我需要在構建過程中儘早解決一些基本的錯誤處理問題。我完全是自學成才的,不知何故,三年沒有成爲一個問題。

希望有人沒有被教過,可以看到這個,然後拉出他們的頭髮14個小時。

解決方案 關閉所有其他Excel實例和上述代碼工作。在錯誤處理和更早的地址清除地址:http://support.microsoft.com/kb/317109 也許還可以調用GC,雖然這似乎有爭議。

最終代碼:

.... 
Imports System.Runtime.InteropServices 
.... 
Dim CurrentRun As New Excel.Application 
Dim CurrentBook As Excel.Workbook 
Dim CurrentSheet As Excel.Worksheet 
.... 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    On Error GoTo VortexInYourSoul 
    CurrentRun = System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application") 
    CurrentBook = CurrentRun.Workbooks(1) 
    CurrentRun.Visible = True 
    CurrentSheet = CurrentBook.Sheets(8) 
    CurrentSheet.Activate() 
    CurrentBook.ActiveSheet.name = "LLAMA LALA LLAMALMALMAL" 
    .... 
    Exit Sub 
VortexInYourSoul: 

    CurrentSheet = Nothing 
    CurrentBook.Close(False) 
    CurrentBook = Nothing 
    CurrentRun.Quit() 
    CurrentRun = Nothing 
    MsgBox("Error: " & Err.Description) 

    End Sub