要避免不喜欢一般问题的主持人,这是一个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可以由用户关闭。在这种情况下,所有参考它的变量(或其内部的对象,例如页面或形状)将变为无效。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top