Question

Pour éviter les modérateurs qui n'aiment pas les questions générales, il s'agit d'une visio VBA, mais je ne voulais pas inclure cela dans le titre car c'est un peu niche, et je suppose que la réponse pourrait être générique :-)

Mon code a les variables suivantes:

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

Pour ceux qui sont inconnus avec Visio, vous créez un objet d'application, ouvrez le document, puis définissez une référence sur une page du document où vous pouvez réellement faire du dessin.

Tous les vars sont globaux, mais en réalité, GDOCFILE n'est utilisé que dans ma routine d'initialisation. Donc, ma question est que j'ai besoin de GDOCFILE comme global, ou puis-je simplement le rendre local? Je suppose que j'avais craqué que si c'était local lorsqu'il est sorti de la portée, cela pourrait ranger l'objet de document, mais j'ai toujours besoin de la page du document?

Est-ce que cela a du sens?

Était-ce utile?

La solution

Ne faites pas une variable ou un objet global à moins que vous ne l'iez absolument pas, ce qui n'est presque jamais.Passez des références d'objet comme paramètres à ces procédures qui en ont besoin - et uniquement à celles-ci.Tout ce dont vous avez besoin de l'objet avant de "fonctionner de portée", comme vous le dites, doit être transmis à la procédure d'appel en tant que valeur de retour de fonction (ou, plus obscurelement donc, moins de préférence, valeur de paramètre SUB BYREF).

Lorsque vous dites qu'un objet est hors de portée, c'est en fait la référence à cet objet hors de portée.L'objet existe toujours inaltéré en mémoire.

Généralement, Global est mauvais et conduit à un code difficile à maintenir, mais des exceptions pourraient être des choses comme des constantes universelles, par exemple.

Public Const PI As Double = 3.14159265358979

C'est bien d'avoir cela comme global.

Autres conseils

Dans votre cas, la durée de vie du document est contrôlée par une application Visio, la DOC ne sera pas nettoyée, quelle que soit la quantité de variables qui y référence que vous créez, ou dans lesquelles elles sont (globales ou locales).Les règles de comptage de référence (Scoping) sont simplement ignorées par la Visio pour des documents en fait - la DOC n'est pas détruite, même s'il n'ya plus de références à partir de votre code.

Vous pouvez dire à Visio de fermer le document à l'aide du document.Close.Après cet appel, toute tentative d'utilisation des méthodes ou des propriétés de Document (ou de page) à l'aide de toutes les variables DOC / pages faisant référence à ce document / page dans ce document entraînera une exception.

Un doc peut être fermé par l'utilisateur.Dans ce cas, toutes les variables qui se réfèrent à celle-ci (ou des objets à l'intérieur, tels que des pages ou des formes) deviendront invalides.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top