2

まず、コミュニティに参加できてとてもうれしいです。頻繁にアドバイスを交換できればと思います。私はフランス人なので、文章の間違いをお許しください。

私は自分の問題を説明しようとします:

Excel ファイルの Backstage を使用して小さなダッシュボードを作成するという "良い" アイデアがありました。それは非常にうまく機能します。

このファイルは、Excel の同じインスタンスで別のファイルと同時に開かれると、問題が発生します。2 番目のファイルは、ワークブックの関数 "Backstage_OnShow" および "Backstage_OnHide" にアクセスしようとしているため、「マクロ 'Backstage_OnShow' (または 'Backstage_OnHide') を実行できません。このマクロでは使用できない可能性があります」というメッセージが表示されます。 workbook ..." <-これは、フランス語のエラー メッセージの翻訳です。

このメッセージが表示されないようにするには、またはバックステージが Excel のインスタンスではなくファイルに固有のものであることを確認するにはどうすればよいですか?

コードスニペットで示します。より明確になります。

私のXMLには、これがあります:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad ="Ribbon_Load">
  <ribbon startFromScratch="false"/>
  <backstage onShow="Backstage_onShow" onHide="Backstage_onHide">
...
  </backstage>
</customUI>

私のExcelファイルには、これがあります:

Public Sub Ribbon_Load(ribbon As IRibbonUI)

  Set Ruban = ribbon

End Sub

Public Sub Backstage_onShow(ByVal contextObject As Object)

    'Rafraichissement du ruban
    Ruban.Invalidate

End Sub

Public Sub Backstage_onHide(ByVal contextObject As Object)



End Sub

これはすべて通常の Excel ファイルに含まれています。Excel 2010 では、Excel ファイルは既定で同じインスタンスで開かれますが、これは気になりませんが、カスタマイズしたバックステージ ファイルと同じインスタンスで「通常の」ファイルを開くと、通常のファイルが試行されます。 Backstage_onShow Backstage_onHide 関数にアクセスし、その舞台裏を表示するとすぐに、なんという奇跡でしょう。ただし、これらの関数は報告されないため、このファイルはこれらの関数が存在することさえ知らないはずです。

前もって感謝します。

心から、

パトリス。

PS : これは、私のファイルを表示したい場合のリンクです。もちろん、安全なコード スニペットです。

4

2 に答える 2

1

@デビッド、解決策があります!!!!

私に答えるためにあなたの時間を割いてくれてありがとう!!!

私はあなたに説明しようとします。

ですから、少し考えてみると、問題は、コード スニペットを格納するための明示された場所が必要なことであることに気付きます。この場所はXLSTARTにあります!!! PERSONAL.XLSB を使用してそれを保存する場合:

Public Sub Ribbon_Load(ribbon As IRibbonUI)

  Set Ruban = ribbon

End Sub

Public Sub Backstage_onShow(ByVal contextObject As Object)

    'Rafraichissement du ruban
    Ruban.Invalidate

End Sub

Public Sub Backstage_onHide(ByVal contextObject As Object)

    'ErreurSaisieTaux = 0

End Sub

その後、次のように customui.xml を変更できます。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad ="PERSONAL.XLSB!Ribbon_Load">
  <ribbon startFromScratch="false"/>
  <backstage onShow="PERSONAL.XLSB!Backstage_onShow" onHide="PERSONAL.XLSB!Backstage_onHide">
...
  </backstage>
</customUI>

私は試してみましたが、うまくいきます。

このアイデアについてどう思いますか? この方法の欠点はありますか?

パトリス。

于 2013-09-04T14:45:08.793 に答える
0

Backstage は の一部であり、およびイベント Applicationに対して特定のマクロを呼び出す必要があることを指定しました。onShowonHide

Excel は、修飾されていないマクロ (たとえばBackstage_onShowActiveWorkbook. このマクロが に存在しない場合ActiveWorkbook、エラーが発生します。

これを解決するには、マクロ呼び出しが特定のワークブックを修飾するように XML を修正します。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad ="Ribbon_Load">
  <ribbon startFromScratch="false"/>
  <backstage onShow="Exemple.xltm!Backstage_onShow" onHide="Exemple.xltm!Backstage_onHide">
...
  </backstage>
</customUI>

このメソッドが XLTM ファイルで機能するかどうかについて

コメントからのフォローアップ:

XLSM ファイルで上記の方法を使用するとBackstage_OnShow、マクロを含むファイルが開いているため、開いているワークブック ファイルExemple.xlsm!Backstage_OnShowであるため、workが呼び出されます。Exemple.xlsm

XLTM ファイルでこのメソッドを使用してonShow ="Exemple.xltm!Backstage_OnShow、テンプレートから新しいファイルを作成すると、マクロが見つからないため、明示的な XMLは失敗します。Exemple.xltmWorkbooks コレクションの有効なメンバーではないため、マクロが見つかりません。

以前に試みたように、XML がマクロを完全に修飾していない場合 (例: )、 XLTM によって作成されていないonShow="Backstage_OnShow開いているワークブックに移動すると、同じ理由で同じエラーが発生します。見つかった。この場合、マクロは のスコープで見つかりません。ActiveWorkbook

これは単にXLTMファイルでは機能しないようです(少なくともかなりの努力なしでは機能しません)

Backstageハイジャックする代わりにカスタムタブを作成すれば、それを機能させることができるかもしれません。

または、ファイルの新しいインスタンスごとにリボン XML を変更する必要があると思います。リボン XML を変更することは可能ですが、ファイルが開いている間は変更できないと思います。

私が考えることができる最善の解決策は、次のことを行うアドインまたはマクロを作成することです。

1) ユーザーに新しいファイル名を要求する 2) テンプレートから新しいファイルを作成し、保存して閉じる 3) 新しいファイルのリボン XML の内容を変更する 4) 新しいファイルを開く

XML の解凍と変更に関する情報については、これを参照してください。

http://www.jkp-ads.com/articles/Excel2007FileFormat02.asp )

于 2013-08-28T15:14:13.337 に答える