7

ここにあるマイクロソフトのサンプル「ウォークスルー: カスタム タスク ペインとリボン ボタンの同期」を正常に実装しました: http://msdn.microsoft.com/en-us/library/bb608590.aspx

最初に、タスク ペインが表示されないという問題に遭遇しました。これは、アドインと Microsoft の「分析ツールパック」との間の競合の結果であることが判明しました。分析ツールパックを無効にすると、カスタム作業ウィンドウが期待どおりに表示および非表示になり始めました。

次に、ユーザーがボタンを押したときに、選択した範囲内のセルを変更するコードをいくつか書きました。別のワークブックを開くまでは、問題なく動作しているように見えました。各ワークブック ウィンドウには独自のアドイン リボンがありましたが、トグル ボタンをクリックしてカスタム作業ウィンドウを開く/閉じると、作成された最初のウィンドウのカスタム作業ウィンドウしか開いたり閉じたりしませんでした。これは、どのウィンドウでトグル ボタンをクリックしても変わりません。

このコードは、ThisAddIn_Startup で CustomTaskPane オブジェクトをインスタンス化します (サンプル コードと同様)。私が実際に追加したのは、UserControl のボタン アクションだけです。

using xl = Microsoft.Office.Interop.Excel;

namespace SynchronizeTaskPaneAndRibbon
{
    public partial class TaskPaneControl : UserControl
    {
        public TaskPaneControl()
        {
            InitializeComponent();
        }

        private void actionButton1_Click(object sender, EventArgs e)
        {
            xl.Range selection_rng = Globals.ThisAddIn.Application.Selection;

            foreach (xl.Range cell in selection_rng.Cells)
            {
                if (cell.Value is string)
                {
                    string v = cell.Value;
                    cell.Value = v + "*";
                }
            }
        }
    }
}

コードの残りの部分は、例と同じです。

開いている複数のワークブックで機能するように例を変更する方法はありますか? 私が望むのは、同じアドインが各ワークブック ウィンドウに表示され、同じリボンと同じカスタム ペインが表示されることです。そしてもちろん、リボン アクション (ボタンを押すなど) を同じウィンドウ内に表示されるカスタム作業ウィンドウにルーティングします。

4

1 に答える 1

0

はい、MSDN には、複数のドキュメントでカスタム タスクペインを管理する方法について説明している別の例があります。これは Word/InfoPath の観点からのものですが、基本的な考え方は Excel でも同じであることに注意してください。

大まかに言えば、現在のワークブックにタスクペインがない場合は、新しいタスクペインを追加する必要があります。そのため、カスタム タスクペイン ロジックの追加を、アドインの起動からリボン ボタンのクリック イベントに移動します。ボタン クリック イベントでこれを行うと、リボンがクリックされたときに現在のドキュメントに新しい作業ウィンドウを追加する機会が得られます。

リンク: https://msdn.microsoft.com/en-us/library/bb264456(v=office.12).aspx?f=255&MSPPError=-2147217396#Anchor_2

将来リンクが無効になった場合に備えて、以下に役立つコード スニペットを配置します。

//Add a custom taskpane to active Word document
public void AddCalendarTaskPane(Word.Document doc)
{
    ctpCalendar = this.CustomTaskPanes.Add(new CalendarControl(),
        "Select a date", doc.ActiveWindow);
    ctpCalendar.Visible = true;
}

削除する代わりに、Visible フラグを false に切り替えてタスクペインを非表示にすることをお勧めしますが、YMMV です。お役に立てれば。

于 2015-12-10T12:24:28.520 に答える