哪些对象制作全球,这是一个局部的?
-
21-12-2019 - |
题
要避免不喜欢一般问题的主持人,这是一个Visio VBA之一,但我不想在标题中包含它,因为它有点基础,我猜答案可能是通用的:-)
我的代码有以下变量:
Public gappVisio As Visio.Application
Public gdocFile As Visio.Document
Public gpagDiagram As Visio.Page
.
对于那些不熟悉的Visio,您可以创建一个应用程序对象,打开文档,然后在文档中设置一个页面的引用,您可以实际执行一些绘图。
所有vars都是全局的,但实际上gdocfile仅用于我的初始化例程。 所以我的问题是,我是否需要GDocfile作为全局,或者我可以让它当地吗? 我想我担心如果它是本地的,当它超出范围时,它可能整理文件对象,但我仍然需要文档的页面?
这是有意义的吗?
解决方案
除非您绝对必须,除非您绝对必须进行变量或对象全局,这几乎从不。将对象引用作为参数作为需要它们的参数 - 并且仅限于那些程序。如您所说,您需要从对象中所需的任何东西,应该通过函数返回值(或者更晦涩地,更晦涩地,优选地,子ByRef参数值更少。
当您说一个对象超出范围时,它实际上是引用对该对象超出了范围。对象仍然存在于内存中不置换。
一般来说,全局是糟糕的并且导致难以维护的代码,但例外可能是普遍常量,例如万常数。
Public Const PI As Double = 3.14159265358979
.
很多,就像全球一样。
其他提示
在您的情况下,文档生命周期由Visio应用程序控制,Doc将不会被清理清理,无论您如何创建它,或者在其所在的范围内(全局或本地)。意思是,所有引用计数(范围)规则都是通过Visio忽略文件的,实际上 - Doc不会被销毁,即使您的代码没有更多的引用。
您可以告诉Visio使用Document.Close关闭文档。在该呼叫之后,任何尝试使用文档(或页面)的方法或属性使用任何Doc / Page变量,在本文档中引用此文档/页面将导致异常。
DOC可以由用户关闭。在这种情况下,所有参考它的变量(或其内部的对象,例如页面或形状)将变为无效。