Un procedimiento declarado como Friend es "casi" público, pero sólo dentro del propio proyecto, ya que si realmente fuesen públicos podrían ser accesible desde otro proyecto, cosa que no ocurre con los procedimientos "amigos"...
Osea que se usan de igual forma que los ejemplos mostrados para usar en un módulo BAS, salvo que en lugar de declararse como Public se declaran como Friend, además en un módulo de clase NO se puede declarar un Tipo Definido de forma pública, siempre tienen que ser Privados.
Por tanto las funciones quedarían así:
Friend Function Edad2(elColega As tColega) As Long
'Devuelve la edad del colega que se ha pasado como parámetro
'y actualiza la fecha de modificación.
Dim tEdad As Long
tEdad = Year(Now) - elColega.AñoNac
elColega.Modificado = Now
Edad2 = tEdad
End Function
Friend Function NuevoColega2( _
ByVal sNombre As String, ByVal lngAñoNac As Long, _
ByVal sEmail As String, ByVal sUrl As String) As tColega
'Devuelve un elemento del tipo tColega,
'que es el declarado en el módulo BAS.
'Se usan los datos pasados como parámetro
'Usamos una variable temporal para asignar los datos
Dim tmpColega As tColega
With tmpColega
.Nombre = sNombre
.AñoNac = lngAñoNac
.email = sEmail
.Url = sUrl
.Modificado = Now
End With
'Devolver el dato
NuevoColega2 = tmpColega
End Function
Para usarlo desde un formulario habría que hacerlo así:
'
'Declaración de la clase de prueba
Private m_colega As ctestUDT
'En el Form_Load:
'Creamos el objeto...
Set m_colega = New ctestUDT
'Crear un par de colegas para tenerlos en el listBox
'Es conveniente que antes de hacer el Redim Preserve
'el array esté ya dimensionado...
'ya que he leido en algún sitio que puede dar ERROR
numColegas = numColegas + 1
ReDim Preserve variosColegas(0 To numColegas)
'Usando el método de la clase:
variosColegas(numColegas) = _
m_colega.NuevoColega2( _
"Guille", 1957, "
mensaje@elguille.info", _
"
http://www.elguille.info/") 'Usamos el método de la clase
Label1(5) = " Edad:" & m_colega.Edad2(variosColegas(queColega)) & " tacos"
'Mostrar el colega número "i"
With variosColegas(i)
List1.AddItem .Nombre & vbTab & .AñoNac & vbTab & _
.email & vbTab & _
Left$(.Url & Space$(64), 64) & vbTab & _
Format$(.Modificado, "dd/mmm/yyyy hh:mm:ss")
End With