Pergunta

Para evitar os moderadores que não gostam de perguntas gerais, esta é uma do Visio VBA, mas não queria incluir isso no título porque é um pouco específico e acho que a resposta pode ser genérica :-)

Meu código possui as seguintes variáveis:

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

Para aqueles que não estão familiarizados com o Visio, você cria um objeto de aplicativo, abre o documento e, em seguida, define uma referência para uma página do documento onde você pode realmente fazer algum desenho.

Todos os vars são globais, mas na verdade gdocFile é usado apenas na minha rotina de inicialização.Então, minha pergunta é: preciso do gdocFile como global ou posso apenas torná-lo local?Suponho que estava preocupado que, se fosse local quando saísse do escopo, poderia arrumar o objeto Document, mas ainda preciso da página do documento?

Isso faz sentido?

Foi útil?

Solução

Não torne uma variável ou objeto global, a menos que seja absolutamente necessário, o que quase nunca acontece.Passe referências de objetos como parâmetros para os procedimentos que precisam delas - e somente para eles.Tudo o que você precisa do objeto antes que ele "fique fora do escopo", como você diz, deve ser passado para o procedimento de chamada como valor de retorno da função (ou, de forma mais obscura e menos preferencial, valor do parâmetro Sub ByRef).

Quando você diz que um objeto está fora do escopo, na verdade é o referência para aquele objeto que está fora do escopo.O objeto ainda existe inalterado na memória.

Geralmente, global é ruim e leva a um código difícil de manter, mas as exceções podem ser coisas como constantes universais, por exemplo.

Public Const PI As Double = 3.14159265358979

É bom ter isso como global.

Outras dicas

No seu caso, o tempo de vida do documento é controlado pelo aplicativo Visio, o documento não será limpo, não importa quantas variáveis ​​que se referem a ele você crie, ou em quais escopos elas estejam (globais ou locais).Significa que todas as regras de contagem de referências (escopo) são simplesmente ignoradas pelo Visio para documentos de fato - o documento não é destruído, mesmo que não haja mais referências a ele no seu código.

Você pode instruir o Visio a fechar o documento usando document.close.Após essa chamada, qualquer tentativa de usar métodos ou propriedades do documento (ou página) usando qualquer uma das variáveis ​​doc/page referentes a este documento/página neste documento resultará em exceção.

Um documento pode ser fechado pelo usuário.Neste caso todas as variáveis ​​referentes a ele (ou objetos dentro dele, como páginas ou formas) se tornarão inválidas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top