質問

一般的な質問が好きではないモデレータを避けるために、これはVisio VBA 1ですが、タイトルの中でそれを含めたくありませんでした。

マイコードには次の変数があります。

Public gappVisio As Visio.Application
Public gdocFile As Visio.Document
Public gpagDiagram As Visio.Page
.

Visioとの難しいとは、アプリケーションオブジェクトを作成し、ドキュメントを開き、実際に描画できる文書内のページへの参照を設定します。

すべてのvarsはグローバルですが、実際にはGDocFileは私の初期化ルーチンでのみ使用されます。 だから私の質問は、グローバルとしてGDocfileが必要ですか、それとも地元にするだけですか? 私はそれが範囲外に出たときそれがドキュメントオブジェクトを片付けるかもしれないとローカルであったならば、私はそれが文書のページを必要としていると私は心配したと思いました。

それは意味がありますか?

役に立ちましたか?

解決

あなたが絶対にしていない限り、変数またはオブジェクトをグローバルにしないでください。オブジェクト参照をそれらを必要とするそれらの手順にパラメータとして渡す - そしてそれらのためだけに。あなたが言うように、あなたが「範囲外で実行する」前にあなたが必要なものは、関数戻り値として呼び出し手順に渡されるべきです(または、より不明瞭に、好ましくはサブrefパラメータ値)。

オブジェクトが範囲外のものであると言ったとき、それは実際には範囲外のそのオブジェクトへの参照です。オブジェクトはまだメモリ内で変更されません。

一般的に、グローバルは悪く、維持困難なコードにつながりますが、例外は普遍的な定数のようなものです。

Public Const PI As Double = 3.14159265358979
.

グローバルとしてそれを持っているのは問題ありません。

他のヒント

あなたの場合では、ドキュメントの有効期間はVisioアプリケーションによって制御され、作成したそれを参照する変数、またはそれらがどのスコープであるか(GlobalまたはLocal)の数の変数に関係なく、クリーンアップされません。つまり、すべての参照カウント(スコープ)規則は、実際には文書のVisioによって無視されます。

Document.Closeを使用してドキュメントを閉じるようにVisioに指示することができます。その呼び出しの後、このドキュメントでこのドキュメント/ページを参照していずれかのDoc / Page変数を使用してドキュメント(またはページの)メソッドまたはプロパティを使用しようとすると、例外が発生します。

DOCはユーザーによって閉じられることがあります。この場合、ITを参照するすべての変数(またはページや形などのオブジェクト)が無効になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top