从VB.NET应用程序调用Excel时,如何让Excel出现在应用程序的前面?

我有一个VB.NET应用程序,它使用Microsoft.Office.Interop.Excel来简单地打开一个电子表格,抽取一些数据到它,刷新数据透视表中的数据,然后用电子表格呈现给用户。

代码非常简单(error handling未显示):

' 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 Serverlogin”对话框,因此用户需要ALT +选项卡到Excel或单击任务栏中的Excel – 这对用户来说都不是一个好的体验。 我们希望login对话框出现在调用应用程序的前面。

任何人都可以build议如何实现? 我已经尝试将Refresh和UserControl属性的设置移动到RefreshAll之后,但这没有任何区别。

干杯,

克里斯。

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

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

你可以从xlApp获得hwnd:

 BringWindowToTop((INtPtr)XlApp.Hwnd);