2017-01-16 345 views
4

ワークシートにデータベースのデータを埋め込むExcelアドインを作成しました。また、スタイリングを追加し、FreezePanesを使用していくつかの行と列をロックします。"WindowクラスのFreezePanesプロパティを設定できません" Excel 2016(office 365)

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

これは、すべてのエクセル2013分の2010での魅力のように働いたが、私は最近、2016(オフィス365)をエクセルに切り替え、私のExcelワークシートがフォアグラウンドにないときに、その後から、私にFreezePanesに問題がありました。私はインターネットを検索しました。私が遭遇する唯一の事は、アクティブシート上でフリーズパネルをプリフォームすることしかできないことです。フリーズパネルを設定する前にシートをアクティブにしていました。これは物理的に私のエクセルがフォアグラウンドに送られなかったにもかかわらず、2010年を凌駕しました。オフィス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); 

をしかし、これはあまりにも動作しませんでした。どのような体は私にこの1つを助けることができますか?

明確にする:私のExcelのバージョンは2016バージョン1611(7571.2109の構築)

+0

愚かな質問かもしれませんが、最初のブロックで 'worksheet'をどのように定義して設定しますか? –

+0

私のプロセスの始めに、私はこのような現在のワークシートをキャプチャします: 'Excel.Application.ActiveSheet'このプロセスの間、このワークシートはもはやアクティブなものではないことがあります。いくつかの奇妙な理由で、シートをアクティブにすると多かれ少なかれアクティブになりますが、フォアグラウンドには送られずフリーズペインは失敗します... – DeniseMeander

答えて

0

はい!実際には、ウィンドウを最小化したときに、あなたがこの上で確認する必要があるので、このソリューションはのみ動作することを追加することが重要です

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

:Xatooが追加で提案のように私はこれを修正しました。

これはまだウィンドウをフォアグラウンドに送信しないということです。

2

は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アドインは、365分の2013で良い仕事かのように見えるようになりC#のものより。

+0

これはC#で行います。私は恐れます。ごめんなさい。 – DeniseMeander

1

worksheet.Application.ActiveWindowがアクティブなワークシートを含むウィンドウではない可能性はありますか? 以前のExcelバージョンでは、すべてのワークブックに同じウィンドウが表示されましたが、MicrosoftがMDIをExcel用にドロップして以来、以前と同じコードを使用して突然2つの異なるウィンドウが表示されることがあります。これらのウィンドウを混在させると、遭遇する問題が発生する可能性があります。

エクセル2013以来、いくつかの変更については、このリンクを参照してください:あなたが試みることができるもう一つは、FreezePane呼び出す前に、正常にウィンドウの状態を設定されている https://msdn.microsoft.com/en-us/library/office/dn251093.aspx

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とバグレポートを提出し、彼らができるかどうかを見るために待つことができますこれをバグとして確認してください。

+0

ありがとうございます。あなたの最初の声明、私はすべてのことを同じ目的のために行うので、問題にはなりません。もう1つは試してみます、私はあなたに知らせるでしょう。 そして、3番目もいいです!私もフィードバック項目を見つけました:https://excel.uservoice.com/forums/304921-excel-for-windows-desktop-application/suggestions/17837602-setting-freezepanes-using-c-raises-error-when-wor 皆さん、この方に投票してください!!! :-D – DeniseMeander

関連する問題