2

これは奇妙な頭を掻くものです!

同じ XML 定義、リボン コントロール、および VBA コールバック プロシージャを使用する VBA で記述されたクロス MSO アドインがあります。PowerPoint 2007、2010 & 2013 (x32 & x64)、Excel 2010 & 2013 (x32 & x64) で動作します。

ただし、ソース .xlsm としてロードされた場合、Excel 2007 でのみ機能します。

保存して .xlam としてロードすると (レジストリの OPENX メソッドを使用するか、.xlam を XLSTART フォルダーにコピーして)、失敗します。

失敗は、リボン UI オブジェクトを無効にするプロシージャを呼び出して、ギャラリー コントロール (その下にあるボタン) がそれぞれのコールバック プロシージャのイメージ/状態に従って更新されるときに発生します。リボン オブジェクトへの参照が失われていないことを確認しましたが、invalidate メソッドを呼び出しても、リボン コントロールがそれぞれのコールバック プロシージャを呼び出さないため、更新されません。

2007 XML 部分のギャラリー定義に次の要素を追加して、この問題を回避しようとしましたが、画像アイテムの更新は解決されますが、ボタンはまだコールバック プロシージャを呼び出しません。

invalidateContentOnDrop="true"

どのビットがこの奇妙な動作の診断に役立つかわからないため、コードは投稿していませんが、リクエストに応じて行うことができます!

何か案は?

4

1 に答える 1

1

どー。

これは、目がくらむほど明白なことを発見するために丸一日を費やした後、解決されました!!!

問題は、XML/VBA コードで同じ onLoadRibbon 署名を使用する別のアドインが既にインストールされていたため、アドイン間でクロストークが発生し、すべてが台無しになったことです。私が理解していないのは、2007年と2010年に影響を与えた理由です(後でテストしました)が、2013年には問題が示されませんでした.

とにかく、両方のアドインでそれぞれの署名と XML コードを次のように変更しました。

アドイン 1

XML:

<customUI onLoad="app1LoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">

VBA:

Public Sub app1LoadRibbon(ByVal ribbonUI As IRibbonUI)

アドイン 2

XML:

<customUI onLoad="app2LoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">

VBA:

Public Sub app2LoadRibbon(ByVal ribbonUI As IRibbonUI)
于 2013-10-22T17:24:38.017 に答える