tutorial - userform events excel vba
Establecer un tipo en VBA a nada? (7)
La forma estándar es restablecer cada miembro a su valor predeterminado individualmente. Esta es una limitación de los tipos definidos por el usuario en comparación con los objetos.
A riesgo de afirmar lo obvio:
With point
Set .list = Nothing
.name = ""
.number = 0
End With
Alternativamente, puede crear una variable "en blanco" y asignarla a su variable cada vez que quiera "borrarla".
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
He definido una variable con un tipo propio, por ejemplo
Dim point As DataPoint
Public Type DataPoint
list as Collection
name as String
number as Integer
End Type
y quiero eliminar todos los valores del point
variable a la vez. Si fuera una clase, solo usaría Set point = New DataPoint
, o establecería Set point = Nothing
, pero ¿cómo puedo proceder si es un tipo?
Otra opción es usar la palabra reservada "Vacío" como:
.number = Vacío
El único problema es que deberá cambiar el número de entero a variante.
Para eso es mejor usar las clases, puede declarar un módulo de clase con el nombre de su tipo, luego declarar todos sus miembros como públicos, luego automáticamente puede configurar nada y ser nuevo para crear y eliminar instancias.
la sintaxis será algo así después de crear el módulo de clase y nombrar como su tipo:
''
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
Puede beneficiarse del hecho de que las funciones en VB tienen una variable implícita que contiene el resultado, y que contiene el valor de tipo predeterminado por defecto.
public function GetBlankPoint() as DataPoint
end function
Uso:
point = GetBlankPoint()
Un trazador de líneas:
Function resetDataPoint() As DataPoint: End Function
Uso:
point = resetDataPoint()
Usar clases en VBA suele ser una buena práctica en caso de que no sea una solución de un solo propósito o la clase no contenga demasiados atributos privados porque si desea cumplir con las reglas de OOP y mantener su clase segura, debe declarar todos los permisos y Obtenga propiedades para todos los atributos privados de la clase. Esto es demasiada codificación en caso de que tenga más de 50 atributos privados. Otro aspecto negativo del uso de clases en Excel es el hecho de que VBA no es totalmente compatible con el OOP. No hay polimorfismo, sobrecarga, etc.). Incluso si desea usar una herencia, debe declarar todos los atributos y métodos de la clase original en la clase heredada.
Entonces, en este caso, preferiría la solución sugerida por Jean-François Corbett o GSeng, es decir, asignar una variable vacía del mismo UDT como la variable que desea borrar o utilizar una función que a mí me parece una solución un poco más elegante porque no reservará memoria permanente para la variable emtpy de su tipo UDT.
EDITAR : ¡Maldición! Derrotado por JFC: D
Aquí hay una alternativa para lograr eso en 1 línea;)
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
INSTANTÁNEA