English 中文(简体)
是否可以在VB6/VBA中发送和存储类型引用?
原标题:
  • 时间:2008-09-24 12:03:47
  •  标签:

我正在开发一个VB6应用程序,我想发送一个类型作为引用,并将其存储在另一个表单中。这可能吗?

发送它没有问题,我只使用ByRef关键字:

public Sub SetStopToEdit(ByRef currentStop As StopType)

但是,当我试图使用Set将<code>currentStop</code>存储在接收模块中时,我在运行程序时会收到“Object required”错误:

Private stopToEdit As StopTypeModule.StopType
  ... Lots of code
Set stopToEdit = currentStop

StopType在模块中定义如下(不是类模块):

Public Type StopType
    MachineName As String
    StartDate As Date
    StartTime As String
    Duration As Double
End Type

是否可以存储发送的引用,或者是否必须将StopType转换为类?

仅设置局部变量即可:

stopToEdit = currentStop

稍后更改<code>stopToEdit</code>时,发送到<code>SetStopToEdit>的变量中的更改不可见。

最佳回答

您需要将它重构为一个类。

问题回答

什么是StopType?它是如何定义的?类型是VB6录制的东西吗?如果是这样(如果可能的话),您应该将其重新定义为一个类,并且只使用这些类,否则您将遇到Collections的问题。

试着去掉<code>Set</code>关键字-字符串、整数和数字,但如果我没记错的话,还有Records,它们不是<em>Set</em>,它们是<em>Let</em〕,但这在赋值中是隐含的:

stopToEdit = currentStop

编辑:如果您想更改传入的(ByRef)记录,请对元素进行手动复制,而不是重新分配整个内容,这样就可以了。

同时:不要!ByRef(遗憾的是,在VB中是默认值)并不是很酷(套用我儿子的话)。试着设计你的函数,这样它们就不会改变传入的参数——这就是你的返回值。。。

这里的困惑在于StopType不像对象那样是引用,而是表现得更像LONG之类的内置类型。当您这样做时:

stopToEdit=当前停止

您只是在复制currentStop。如果随后更改stopToEdit,则需要将其复制回:

currentStop=停止编辑

这样,值将从Sub中传递回来。





相关问题
热门标签