1

我有一個VB.NET應用程序,它使用Microsoft.Office.Interop.Excel來簡單地打開一個電子表格,向其中抽取一些數據,刷新數據透視表中的數據,然後向用戶顯示電子表格。從VB.NET應用程序調用Excel時,如何讓Excel出現在應用程序前面?

的代碼非常簡單(處理未顯示錯誤):

' Start Excel Application 
    xlApp = New Excel.ApplicationClass 

    ' Get Excel Workbooks 
    xlWorkBooks = xlApp.Workbooks 

    ' Open workbook 
    xlWorkBook = xlWorkBooks.Open(Filename:=sExcelDocFullPath, IgnoreReadOnlyRecommended:=blnIgnoreReadOnly) 

    If Not xlWorkBook Is Nothing Then 

     ' Pump some data over (code not shown) 
     ' Make the first worksheet in the document active 
     CType(xlWorkBook.Worksheets(1), Excel.Worksheet).Activate() 

     'Return control of Excel to the user 
     xlApp.Visible = True 
     xlApp.UserControl = True 

     ' Refresh workbooks (with alerts off, so as not to hassle user) 
     xlApp.DisplayAlerts = False 
     xlWorkBook.RefreshAll() 
    End If 

時運行這些代碼會發生什麼事,是Excel中打開了調用應用程序的後面,因爲我們是刷新數據連接,在調用應用程序後面還會顯示小型Excel「SQL Server登錄」對話框,因此用戶需要將ALT + TAB添加到Excel或單擊任務欄中的Excel - 對用戶來說這兩者都不是很好的體驗。我們希望登錄對話框出現在呼叫應用程序的前面。

任何人都可以建議如何實現?我嘗試將可見的& UserControl屬性的設置移動到RefreshAll之後,但這沒有任何區別。

乾杯,

Chris。

+0

我們有類似的問題,並嘗試了不同的方法。首先,您可以將windowState屬性設置爲XlMaximized(或XlNormal)。對於其他選項,您需要窗口句柄,並在有窗口句柄時將其告知onTop。但找到句柄並不容易...... Excel應用程序hwnd中有一個屬性。此外,你可以從窗口形成工作簿 –

回答

2

對不起,C#,我不知道VB,所以我不能我自己翻譯,但主要的想法是使用WinAPI的:

[DllImport("user32.dll", SetLastError = true)] 
public static extern bool BringWindowToTop(IntPtr hWnd); 

您可以從xlApp得到HWND:

BringWindowToTop((INtPtr)XlApp.Hwnd); 
+0

謝謝亞歷克斯 - 這是做的伎倆!在VB中它只是BringWindowToTop(CType(xlApp.Hwnd,IntPtr)) –

相關問題