是否可以在VB6 / VBA中发送和存储Type引用?

时间:2008-09-24 12:03:47

标签: vba

我正在研究VB6应用程序,我想发送一个Type作为参考,并以另一种形式存储它。这可能吗?

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

public Sub SetStopToEdit(ByRef currentStop As StopType)

但是当我尝试使用Set在接收模块中存储currentStop时,运行程序时出现“需要对象”错误:

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

稍后更改stopToEdit时,在发送给SetStopToEdit的变量中看不到更改。

3 个答案:

答案 0 :(得分:2)

你需要将它重构成一个类。

答案 1 :(得分:1)

什么是StopType?它是如何定义的?是一个键入VB6记录的东西?如果是这样(如果可能的话),你应该将它重新定义为一个类 - 并且只使用那些,否则你将遇到集合问题。

尝试删除Set关键字 - 字符串,整数和数字,但如果我没记错,还有记录,不是设置,它们是,但这在分配中是隐含的:

stopToEdit = currentStop

编辑:如果你想改变传入(ByRef)记录,为元素复制做一个手动元素,而不是重新分配整个事情 - 这应该可以解决问题。

同时:不要! ByRef(遗憾地在VB中默认)并不是那么酷(用我的儿子的话来说)。尝试设计你的函数,这样它们就不会改变传入的参数 - 这就是你有...的返回值

答案 2 :(得分:0)

这里的混淆是StopType不是像对象那样的引用,但行为更像是内置类型,如LONG。当你这样做时:

stopToEdit = currentStop

您只需要获取currentStop的副本。如果您随后更改stopToEdit,则需要将其复制回来:

currentStop = stopToEdit

这样,该值将从Sub。传回。