
Contenido
La instrucción `Property Set` en VBA (Visual Basic for Applications) se utiliza para definir una propiedad que asignará un objeto a una variable privada dentro de una clase. Esto significa que, en lugar de trabajar con un valor simple como un número o una cadena de texto, `Property Set` se utiliza para manejar y asignar referencias a objetos.
Aquí hay un ejemplo básico de cómo se usa `Property Set`:
' Definición de una clase llamada MiClase
Class MiClase
Private pMiObjeto As Object ' Variable privada para almacenar el objeto
' Definir una propiedad pública para asignar pMiObjeto
Public Property Set MiObjeto(value As Object)
Set pMiObjeto = value
End Property
' Definir otra propiedad pública para recuperar pMiObjeto
Public Property Get MiObjeto() As Object
Set MiObjeto = pMiObjeto
End Property
End Class
En el ejemplo anterior, `MiClase` tiene una propiedad llamada `MiObjeto`. Hay dos partes en la definición de la propiedad: `Property Set` para asignar un objeto nuevo a la variable privada `pMiObjeto`, y `Property Get` para recuperar el objeto actualmente asignado.
Aquí se muestra cómo utilizar la clase y la propiedad definida:
' Crear un nuevo objeto de MiClase
Dim m As New MiClase
Dim o As Object
' Crear un nuevo objeto para asignar
Set o = New Collection ' Utilizando Collection como ejemplo, podría ser cualquier tipo de objeto
' Utilizar Property Set para asignar o a MiObjeto
Set m.MiObjeto = o
' Y luego podemos recuperar la propiedad con Property Get
Dim newObj As Object
Set newObj = m.MiObjeto
Cuando trabajamos con objetos y asignamos uno a otro utilizando `Set`, estamos trabajando con referencias a esos objetos en lugar de con sus valores. De ahí que cuando deseemos cambiar la referencia a un nuevo objeto, debemos utilizar `Property Set`.
Recuerda que a `Property Set` siempre se le debe pasar un argumento tipo `Object` o una clase específica. Si intentas pasar un valor primitivo como `String` o `Integer`, recibirás un error. Para valores no-objeto, deberás usar `Property Let` en lugar de `Property Set`.