Domanda

Per evitare i moderatori che non amano le domande generali, questo è un Visio Vba, ma non volevo includerlo nel titolo come è un po 'di nicchia, e immagino che la risposta possa essere generica :-)

Il mio codice ha le seguenti variabili:

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

Per coloro che non sono motivo di Visio, si crea un oggetto applicativo, apri il documento, quindi impostare un riferimento a una pagina nel documento in cui è possibile effettivamente fare un po 'di disegno.

Tutti i vars sono globali, ma in realtà Gdocfile viene utilizzato solo nella mia routine di inizializzazione. Quindi la mia domanda è, ho bisogno di Gdocfile come globale, o posso semplicemente renderlo locale? Suppongo di essere stato preoccupato che se fosse locale quando è uscito dallo scopo, potrebbe riordinare l'oggetto documento, ma ho ancora bisogno della pagina del documento?

ha senso?

È stato utile?

Soluzione

Non effettuare una variabile o un oggetto globale a meno che tu non abbia assolutamente bisogno, il che non è quasi mai.Passare i riferimenti agli oggetti come parametri a tali procedure che ne hanno bisogno - e solo a quelli.Tutto ciò di cui hai bisogno dall'oggetto prima che "esaurisce la scope", come si dice, dovrebbe essere passato alla procedura di chiamata come valore di ritorno della funzione (o, più oscuramente quindi meno preferibilmente, il valore del parametro secondario secondario).

Quando dici di un oggetto è fuori portata, è in realtà il riferimento a quell'oggetto che è fuori portata.L'oggetto esiste ancora inalterato in memoria.

Generalmente, Global è male e conduce al codice difficile da mantenere, ma le eccezioni potrebbero essere cose come costanti universali, ad es.

Public Const PI As Double = 3.14159265358979
.

Va bene averlo globale.

Altri suggerimenti

Nel tuo caso, la durata del documento è controllata da Visio Application, il DOC non sarà ripulito, non importa quante variabili che si riferiscono ad esso creano, o in cui gli ambito sono (globali o locali).Significa, tutte le regole di conteggio (scoping) di riferimento sono semplicemente ignorate da Visio per i documenti in effetti - il DOC non viene distrutto, anche se non ci sono più riferimenti ad esso dal tuo codice.

È possibile dire visio di chiudere il documento utilizzando Document.Close.Dopo tale chiamata, qualsiasi tentativo di utilizzare i metodi o le proprietà del documento (o della pagina) utilizzando una qualsiasi delle variabili DOC / PAGE che fanno riferimento a questo documento / pagina in questo documento comporterà un'eccezione.

Un documento può essere chiuso dall'utente.In questo caso tutte le variabili che si riferiscono (o gli oggetti all'interno di esso, come pagine o forme) non saranno validi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top