我已经定义了一个具有自己类型的变量,比如说
Dim point As DataPoint
Public Type DataPoint
list as Collection
name as String
number as Integer
End Type
我希望一次删除变量point
的所有值。如果是课程,我会使用Set point = New DataPoint
或设置Set point = Nothing
,但如果是类型,我该怎么办?
答案 0 :(得分:26)
VB中的函数具有保存结果的隐式变量,并且默认情况下包含默认类型值。
public function GetBlankPoint() as DataPoint
end function
用法:
point = GetBlankPoint()
答案 1 :(得分:24)
标准方法是将每个成员单独重置为其默认值。与对象相比,这是用户定义类型的一个限制。
冒着说明显而易见的风险:
With point
Set .list = Nothing
.name = ""
.number = 0
End With
或者,您可以创建一个“空白”变量,并在每次要“清除”它时将其分配给变量。
Dim point As DataPoint
Dim blank As DataPoint
With point
Set .list = New Collection
.list.Add "carrots"
.name = "joe"
.number = 12
End With
point = blank
' point members are now reset to default values
答案 2 :(得分:7)
编辑:该死的!遭到JFC的殴打:D
这是另一种在1行中实现的方法;)
Dim point As DataPoint
Dim emptyPoint As DataPoint
Public Type DataPoint
list As Collection
name As String
number As Integer
End Type
Sub Sample()
'~~> Fill the point
Debug.Print ">"; point.name
Debug.Print ">"; point.number
point.name = "a"
point.number = 25
Debug.Print ">>"; point.name
Debug.Print ">>"; point.number
'~~> Empty the point
point = emptyPoint
Debug.Print ">>>"; point.name
Debug.Print ">>>"; point.number
End Sub
<强>快照强>
答案 3 :(得分:2)
另一种选择是使用保留字&#34;空&#34;如:
.number = Empty
唯一的问题是您需要将数字从整数更改为变体。
答案 4 :(得分:2)
在VBA中使用类通常是一种很好的做法,如果它不是单一用途的解决方案或类不包含太多的私有属性,因为如果你想遵守OOP规则并保证你的类安全,你应该声明所有类的所有私有属性的Let和Get属性。如果您拥有超过50个私有属性,则编码过多。在excel中使用类的另一个消极方面是事实,即VBA不完全支持OOP。没有多态,重载等。)即使你想使用继承,你也必须声明继承类中原始类的所有属性和方法。
所以在这种情况下我更喜欢Jean-FrançoisCorbett或GSeng建议的解决方案,即分配一个与你要清除的变量相同的UDT的空变量,或者使用一个对我来说似乎更多的函数优雅的解决方案,因为它不会为UDT类型的emtpy变量保留永久内存。
答案 5 :(得分:1)
一衬垫:
Function resetDataPoint() As DataPoint: End Function
用法:
point = resetDataPoint()
答案 6 :(得分:0)
为了更好地使用类,您可以使用类型名称声明一个类模块,然后将所有成员声明为public,然后自动设置为nothing和create for create和delete instance。
在创建类模块并命名为类型之后,语法将是这样的:
'
Public List as Collection
Public Name as String
Public Number as Long
Private Sub Class_Initialize()
'Here you can assign default values for the public members that you created if you want
End Sub