2013-07-31 52 views
0

我有一個winform在我的excel應用程序有一個按鈕來最小化窗體。但我也想盡量減少已經打開的Excel應用程序。我編制了下面的代碼,但是告訴我我的變量在被賦值之前被使用。從winform的按鈕最小化Excel

這裏是我的代碼:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 

    Dim xl As Excel.Application 


    Me.WindowState = FormWindowState.Minimized 
    xl.Application.WindowState = XlWindowState.xlMinimized 

End Sub 
+2

當然這是 - 你沒有做任何事情來實際連接到Excel。用類型聲明一個變量並不能自動使它作爲該類型的功能。你必須讓它已經「已經打開」的變量(範圍內)到你的'Button1_Click'處理程序,並用它來代替聲明一個新變量。 –

+0

在這裏不是Excel的專家,但不應該是新的Excel.Application Dim xl?或者引用一個現有的?我的第一個想法是使用互操作。不知道你是否可以用辦公室對象來做到這一點。 –

+0

我確實使用了新的Excel.Application,但創建了一個新的Excel實例。由於excel已經打開,我想最小化打開的實例。 –

回答

1

試試這個找到打開的Excel實例:

Imports System.Runtime.InteropServices 
Public Class Form1 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     'Create an Excel App 
     Dim excelApp As Microsoft.Office.Interop.Excel.Application = Marshal.GetActiveObject("Excel.Application") 
     MessageBox.Show(excelApp.Workbooks.Count.ToString) 
     For i As Integer = 1 To excelApp.Workbooks.Count 
      MessageBox.Show(excelApp.Workbooks(i).FullName) 
     Next 
     excelApp.Visible = False 
     'do your worh here 
     excelApp.Quit() 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp) 
    End Sub 
End Class 

來自 http://social.msdn.microsoft.com/Forums/en-US/1d89ea6d-f396-4a80-8071-9d24a023a254/how-to-search-all-excel-instances-to-see-if-a-particular-workbook-is-already-open

+0

運行的代碼,並得到0的計數,但我可以看到打開工作簿。我必須仔細觀察我的表單,還有其他事情正在發生,我沒有注意到 –

+0

您也可以嘗試使用「FindWindowEx」,查看答案中的URL。由於它基於窗口標題,它稍微複雜一些,可靠性也較差,但也許它會指向正確的方向 – Nick

+0

您的建議存在的問題是,不能解決OP所要求的問題。一旦「正確啓動」,Excel工作簿最小化就沒有問題,但他沒有這麼做!他所做的等同於:Dim test as String = Nothing test.Split() - >由於打算訪問空對象的成員,而不是目標類的實例,您會得到一個錯誤。 – varocarbas

1

肯懷特所說的那樣,錯誤的是相當具有描述性,修復簡單:

xl = New Excel.Application() 

你在這方面的知識是相當低的,所以我建議你使用正確的代碼(和編輯它來實現任何你想要的),以避免將來出現問題:MSDN sample code

相關問題