3

プロジェクトが保存され、.xlam として自動的に読み込まれるときにリボンの onLoad イベントが発生しないが、.xlsm として開かれると機能するという問題を示すために、単純な Excel アドインを作成しました。Excel 2007 (対応する xmlns を含む)、2010 (x32)、および 2013 (x32) で確認しましたが、.xlam としてロードするとすべてのケースで失敗します。

サンプルには 1 つのボタンがあり、クリックするとフラグが切り替えられ、リボンが無効になり、GetLabel コールバックを介してボタンのラベルが切り替えられます。

.xlsm ファイルとして開いた場合は機能しますが、ユーザーの XLSTART フォルダー (Windows レジストリの変更は行われていません) から .xlam アドインとして自動的に読み込まれた場合は機能しません。問題は、onLoad イベントが .xlam バージョンから発生していないため、onLoadRibbon プロシージャが実行されず、無効にするリボン オブジェクトがないことです。

<customUI onLoad="onLoadRibbon" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab idQ="TabInsert">
                <group id="GroupTest" label="2010" insertBeforeMso="GroupInsertLinks">
                    <button id="ButtonTest"
                        getLabel="GetLabel"
                        onAction="ButtonClick"/>
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

対応するアドイン VBA コードは次のとおりです。

Option Explicit

Public Toggle As String
Public myRibbonUI As IRibbonUI

' Ribbon callback : runs when ribbon is loaded
Public Sub onLoadRibbon(ribbon As IRibbonUI)
    ' Get a reference to the ribbon
    Set myRibbonUI = ribbon
    Debug.Print "Ribbon Reference Set"
    MsgBox "Ribbon Reference Set"
End Sub

' Ribbon callback : runs when ribbon button is clicked
Public Sub ButtonClick(control As IRibbonControl)
    ' Invalidate the ribbon so that the label of the button toggles between "true" and "false"
    myRibbonUI.Invalidate
    Debug.Print "Ribbon Invalidated"
End Sub

' Ribbon callback : runs when ribbon is invalidated
Public Sub GetLabel(control As IRibbonControl, ByRef label)
    ' Toggle the label for the button to indicate that the callback has worked
    Toggle = IIf(Toggle = "State 1", "State 2", "State 1")
    label = Toggle
    Debug.Print "Ribbon Button Label Toggled"
End Sub

これが .xlam で機能しないのはなぜですか?

4

2 に答える 2

3

仕様どおりにアドインを正常に作成して実行することができました。

まず、上記のように customUI.xml を使用して *.xlsm を作成しました。注: 私は Excel 2007 を使用しているため、ご指摘のとおり、他の xlmns を使用しましたhttp://schemas.microsoft.com/office/2006/01/customui。次にリボン処理コードを追加し、ワークブックを再度開いてリボンの機能を確認しました。「リボン参照セット」というメッセージボックスをすぐに受け取りました (デフォルトでマクロが有効になっています)。「挿入」タブに追加のボタンがあり、切り替えられることを確認しました。

次に、xlsm を Excel アドイン *.xlam として保存しました。xlam ファイルをダブルクリックして手動で開いたところ、上記の最初のテストのようにすべての機能が表示されました。

Menu3 番目に、Excel ファイル---> Options---> Add-Ins---> Manage Excel Add-Ins--- >からアドインをインストールしましたGo。無関係な Excel ワークブックを開き、アドインが以前のテストと同じように読み込まれたことを確認しました。同じメニューを使用してアドインをアンインストールしました。

C:\Program Files(x86)\4 番目に、Excel.exe 実行可能ファイルの場所に移動して確認し、XLSTARTフォルダーを見つけました。xlam をフォルダーに配置し、無関係な Excel ワークブックを開いて、アドインが以前と同じように機能することを確認できました。

上記があなたの質問に直接答えていないことはわかっていますが、これらのケースをテストし、結果を比較して、どこが壊れているのかを調べてみましょう.

編集:

あなたのコメントに応えて、*.xlam を%APPDATA%\Microsoft\Excel\XLSTARTフォルダーに手動でコピーすると、期待どおりに動作します。私の Windows 7 マシンでは、パスは と評価されC:\Users\username\AppData\Roaming\Microsoft\Excel\XLSTARTます。ご指摘のとおり、これが既定の信頼できる場所であることを Excel のオプションで確認しました。

于 2013-10-22T18:21:18.103 に答える