1

VB.Net で Excel VSTO アドインに取り組んでいます。ユーザーがメイン フォームの使用前、使用後、または使用中に多くのブックを開いたり閉じたりする可能性がある場合に、アドインがどのブックに影響を与えるかを知るという問題に対処しようとしています。

主な機能はすべて、メインのテンプレート ファイルの編集を中心にしています。ユーザーはおそらく便利な名前で保存し、参照またはさらに編集するために戻ってくる可能性があります。アドインはフォームを開き、データベースからワークシートに情報を追加したり、ワークブック (および多くの統計情報) にシートを追加したりするなど、さまざまな機能を実行します。私がやっていることの多くは、特定のワークブックを呼び出すことに依存しています。

        CurrentRun = Marshal.GetActiveObject("Excel.Application")
        CurrentBook = CurrentRun.Workbooks(CurrentIndex)

CurrentIndex現在開いているワークブックの名前で入力/更新されるコンボボックスのインデックスはどこにありますか?

    ...
    ControlCurrentWBComboBox.Items.Clear()
    CurrentRun = Marshal.GetActiveObject("Excel.Application")
    For n = 1 To CurrentRun.Workbooks.Count()
        ControlCurrentWBComboBox.Items.Add(CurrentRun.Workbooks(n).Name)
    Next
    CurrentRun = Nothing
    ...

これにより、ユーザーは作業するワークブックを (名前で) 選択する必要があります。今日8人の異なるユーザーの前に置くまで、これは良い考えのように思えました. 最終的にはほとんどの人がワークブックを選択することに慣れましたが、多くの不平やスロー エラー (適切に処理されていました) がなかったわけではありません。2 人のユーザーはそれを取得できず、誤って間違ったワークブックを継続的に編集し、1 時間使用するとエラーが発生しました。

これを処理するより良い方法はありますか?上記のバージョンと、より少ないオプションを必要とする人向けの 2 つのバージョンを作成しようと考えています。ワークブック自体に VBA コードを配置することで得られる一種の 1 対 1 の関係を強制する方法はありますか?

これに対処しようとしたり、ActiveWorkbook以外のものを参照したりすることで、私は基本的な方法ですか?

[注: これが主観的な質問であることを示す青い警告が表示されるので、少し怖がっています。私はそうするつもりはありません。おそらく言葉遣いについて助けが必要ですか? ]

4

1 に答える 1

1

開いているワークブックでアドインが「正常に機能しない」場合は、おそらくアプリケーション アドインを使用すべきではありません。むしろ、 Document Add-Inを使用する必要があります。

このシナリオでは、ユーザーが 3 つのワークブック (それぞれにアドインが含まれている) を開いている場合、それらはそれぞれ独自のドメインで動作し、他のワークブックが存在しないかのように動作します。

これがあなたの環境のオプションである場合は、ベスト プラクティスとして強くお勧めします。

于 2013-03-29T21:12:59.843 に答える