カスタム作業ウィンドウ ( _CustomTaskPane MSDN ) を作成し、そのDockPositionをフローティングに設定するときに、表示されるウィンドウのTopプロパティとLeftプロパティを指定したいと思います。Office COM API はこれを行う直接的な可能性を提供しないため、CommandBar の対応するプロパティの値を変更することをお勧めします。
var application = (_Application)_nativeTaskPane.Application;
application.CommandBars["Task Pane Title"].Top = top;
application.CommandBars["Task Pane Title"].Left = left;
上記のコードでは、
1) _nativeTaskPane は _CustomTaskPane を実装する私のインスタンスです (実際には Microsoft.Office.Core.CustomTaskPane です)
2) _Application は Microsoft.Office.Interop.Excel._Application です。
もちろん、 Visible = trueを設定してからやっています。より確実にするために、作業ウィンドウのVisibleStateChangeにサブスクライブしました。ただし、HRESULT E_FAILED で COMException が発生しています。
問題は、デバッグ時にこれらのプロパティ (Top & Left) を読み取ることができることですが、それらを設定すると例外がスローされます。
問題がインターネットで少なくとも数回発生したようです。
1) http://www.add-in-express.com/forum/read.php?FID=1&TID=5595
2) [http://aritrasaha.wordpress.com/2009/05/19/programatically-position-office-2007-floating-custom-task-pane/]
3) [http://www.visualstudiodev.com/visual-studio-tools-for-office/need-location-of-custom-task-pane-45822.shtml]
回避策は、Windows API を使用することです。しかし、CommandBar アプローチを使用することの何が問題なのか、誰か説明できますか? たぶん、このトップ/レフトセッターが例外なく機能するように「再構成」することができます。