我正在研究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
的变量中看不到更改。
答案 0 :(得分:2)
你需要将它重构成一个类。
答案 1 :(得分:1)
什么是StopType?它是如何定义的?是一个键入VB6记录的东西?如果是这样(如果可能的话),你应该将它重新定义为一个类 - 并且只使用那些,否则你将遇到集合问题。
尝试删除Set
关键字 - 字符串,整数和数字,但如果我没记错,还有记录,不是设置,它们是让,但这在分配中是隐含的:
stopToEdit = currentStop
编辑:如果你想改变传入(ByRef)记录,为元素复制做一个手动元素,而不是重新分配整个事情 - 这应该可以解决问题。
同时:不要! ByRef(遗憾地在VB中默认)并不是那么酷(用我的儿子的话来说)。尝试设计你的函数,这样它们就不会改变传入的参数 - 这就是你有...的返回值
答案 2 :(得分:0)
这里的混淆是StopType不是像对象那样的引用,但行为更像是内置类型,如LONG。当你这样做时:
stopToEdit = currentStop
您只需要获取currentStop的副本。如果您随后更改stopToEdit,则需要将其复制回来:
currentStop = stopToEdit
这样,该值将从Sub。传回。