簡體   English   中英

“無法設置Window類的FreezePanes屬性”Excel 2016(office 365)

[英]“Unable to set the FreezePanes property of the Window class” Excel 2016 (office 365)

我已經構建了一個excel插件,用數據庫中的數據填充工作表。 我還添加了一些樣式並使用FreezePanes鎖定了一些行和列。

worksheet.Activate();
worksheet.Application.ActiveWindow.FreezePanes = false;
worksheet.Application.ActiveWindow.SplitRow = 4;
worksheet.Application.ActiveWindow.SplitColumn = 11;
worksheet.Application.ActiveWindow.FreezePanes = true;

這一切都像excel 2010/2013中的魅力一樣,但我最近切換到excel 2016(辦公室365),從那時起,當我的excel工作表不在前台時,我遇到了FreezePanes的問題。 我搜索了互聯網,我遇到的唯一事情就是我只能在活動表上預制FreezePanes,我知道 - 我已經在設置FreezePanes之前激活了表單。 這在excel 2010中有效,盡管物理上我的excel沒有被發送到前台。

Office 365中的Excel可能真的希望我的excel工作表在物理上位於前台,但worksheet.Activate()沒有幫助,我也嘗試了以下代碼:

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);    

[DllImport("user32.dll", SetLastError = true)]
static extern System.IntPtr FindWindow(string lpClassName, string lpWindowName); 

string caption = oExcel.Caption;
IntPtr handler = FindWindow(null, caption);
SetForegroundWindow(handler);

但這也行不通。 任何人都可以幫我這個嗎?

需要說明的是:我的excel版本是2016版本1611(Build 7571.2109)

難道是可能的worksheet.Application.ActiveWindow不包含您的活動工作窗口? 在以前的Excel版本中,所有工作簿都具有相同的窗口,但由於Microsoft刪除了Excel的MDI,您可能會突然有兩個不同的窗口使用與以前相同的代碼。 混合這些窗口可能會導致您遇到的問題。

請參閱此鏈接以了解自Excel 2013以來的一些更改: https//msdn.microsoft.com/en-us/library/office/dn251093.aspx

您可以嘗試的另一件事是在調用FreezePane之前將窗口狀態設置為正常:

Worksheet.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlNormal;

而另一種可能性是,這實際上是Excel中的一個錯誤。 我確實找到了其他有同樣問題的人,但不清楚這個人是否解決了這個問題或填寫了錯誤報告:

https://social.msdn.microsoft.com/Forums/office/en-US/7e6ff1ed-b4c6-4c75-82be-14175f44df55/freezepanes-throws-an-exception-when-excel-is-minimized?forum=exceldev

您可以向Microsoft提交錯誤報告,並等待他們是否可以將此確認為錯誤。

是否可以在VBA中執行此操作?

Worksheets("Sheet1").Activate 
ActiveWindow.FreezePanes = False
ActiveWindow.SplitRow = 4
ActiveWindow.SplitColumn = 11
ActiveWindow.FreezePanes = True

如果要檢查工作表是否實際處於活動狀態,您可以執行以下操作:

Private Sub Worksheet_Activate() 
 [method that makes stuff happen]
End Sub

MSDN文檔似乎使得VBA加載項在2013/365中比C#加載更好。

是! 我修改了這個像Xatoo建議添加:

Worksheet.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlNormal;

重要的是要補充說,此解決方案僅在窗口最小化時才起作用,因此您需要檢查此問題。

有趣的細節是,這仍然不會將窗口發送到前台。

您可以設置xlMaximized以獲得最佳實踐。 因為xlNormal可以與xlMinimized相同,所以再次獲取錯誤。

Worksheet.Application.ActiveWindow.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM