1

Excel VBA でモジュラー アドインの簡単なセットを作成しています。

ではAddin1.xlam、「ツール..参照」を選択MyMenus.xlamし、参照として追加しました。

Addin1メニューから自分自身を閉じるためのコードもあります。しかし、Addin1閉じMyMenusても、必要なくなったり参照されなくなったりしても、開いたままになります。

Addin2またはAddin3を参照している場合もありますMyMenus

MyMenus他の開いているプロジェクトに参照がない場合、どうすれば自動的に閉じることができますか?

Addin1または、 「参照していたものをすべて閉じ、さらに閉じる」ように指示するにはどうすればよいですか?

4

2 に答える 2

3

ユーザーが常にシートを保存して参照を破棄していたため、別の方法でこれを解決しました。ちょっとしたハックですが、Excel VBA でそうでないものは何ですか?

Public Sub CloseYourself()
    Application.OnTime Now + TimeValue("00:00:00"), "CloseYourselfNow"
End Sub

Private Sub CloseYourselfNow()
    On Error Resume Next
    ThisWorkbook.Close False
End Sub

基本的に、Workbook_BeforeClose イベントで CloseYourself を呼び出します。これにより、CloseYourselfNow が今から 0 秒間スケジュールされます (Excel のこの部分はシングル スレッドであるため、元のブックが閉じるのを待ちます)。CloseYourselfNow が実行されるまでに、参照は削除され、アドインはそれ自体を閉じることができます。他のまだワークブックに参照がある場合は、On Error Resume Next が必要です。最後に、False を Environ("COMPUTERNAME") のような開発マシンでのみ真となるチェックに変更すると、アドインが保存され、開発の変更が失われることはありません。

于 2013-08-08T17:32:18.153 に答える
0

MyMenusアドインを開いたままにしておくと問題が発生しますか? このような参照は、通常、あなたが説明した理由、つまり他の場所で参照されている場合に正確に開いたままになります。すべてそのままにしておくことをお勧めしますが、続行する場合は、最初のアドインから参照を削除し ( Addin1.xlam)、次に 2 番目のアドインを閉じます ( MyMenus.xlam)。このようなものが動作するはずです:

Dim objRef As Reference

Set objRef = ThisWorkbook.VBProject.References("MyMenus")

Call ThisWorkbook.VBProject.References.Remove(objRef)

'Do not raise an exception as may not be able to close if the add-in is referenced elsewhere
On Error Resume Next
Call Workbooks("MyMenus.xlam").Close(False)
On Error Goto 0

プロジェクトに参照が追加されていることに注意してください(または、バリアントとしてMicrosoft Visual Basic for Applications Extensibility宣言するだけです)。objRef

最終的に閉じるときはAddIn1.xlam、保存せずにそうするようにしてください。そうしないと、参照が永久に失われます。

于 2012-05-11T14:30:49.297 に答える