是否可以在VB6 / VBA中发送和存储类型引用?
时间:2020-03-06 14:39:25 来源:igfitidea点击:
我正在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的变量中不可见。
解决方案
什么是StopType?它是如何定义的?类型是VB6-Record的东西吗?如果是这样(并且可能的话),我们应该将其重新定义为一个类,并仅使用它们,否则会遇到Collections的问题。
尝试删除Set
关键字字符串,整数和数字,但是如果我没记错的话,也没有设置Records,而是将它们设为Let,但这是隐式的:
stopToEdit = currentStop
编辑:如果我们想更改传入的(ByRef)记录,请为元素复制执行一个手动元素,而不是重新分配应做的整个事情。
同时:不要! ByRef(在VB中默认为可悲)不是很酷(用我的儿子来解释)。尝试设计函数,以便它们不更改传入的参数,这就是我们要返回的值...
我们需要将其重构为一个类。
这里的困惑在于StopType并非像对象那样的引用,而是表现得更像内置类型(如LONG)。当我们这样做时:
stopToEdit = currentStop
我们仅复制currentStop。如果随后更改了stopToEdit,则需要将其复制回:
currentStop = stopToEdit
这样,值将被传回Sub。