Dos "private sub"

Buenas tardes,

¿Puedo poner una Private Sub dentro de otra?

En un formulario tengo evento que "al activar registro" busca un registro concreto. El código es éste:

Private Sub Form_Current()

Dim vExp As Long
Dim vDef As Long
Dim vDefDescr As String
vExp = Nz(Me.id_expedient.Value, 0)
If vExp = 0 Then
Me.txtDefinicio.Value = Null
Exit Sub
End If
vDef = DLookup("[materia]", "1 assumptes", "[id_expedient]=" & vExp)
vDefDescrip = DLookup("[materia]", "materia", "[Id-materia]=" & vDef)
Me.txtDefinicio.Value = vDefDescrip

Pero me gustaría que un campo dentro de ese mismo formulario mostrara el fondo amarillo en el supuesto de contener información. El código sería éste:

Private Sub Form_Current()
With Me
If Not IsNull(Me.datarxiu.Value) Then
.datarxiu.BackStyle = 1
.datarxiu.BackColor = vbYellow
Else
.datarxiu.BackStyle = 0
End If
End With
End Sub

La cuestión es si pueden convivir, y cómo, estos dos Private Sub Form juntos. ¿Es posible?

Gracias

1 Respuesta

Respuesta
1

No puedes poner un private sub dentro de otro, aunque puedes hacer una llamada de uno a otro, poniendo el nombre del procedimiento al que quieres llamar, por ejemplo: si tienes dos procedimientos en el mismo módulo (Proc01 y Proc02) y quieres llamar al segundo desde el primero, le pondrías: "Call Proc02", o directamente "Proc02" (sin comillas)

Ahora bien, lo que no puedes tener es en un mismo módulo dos procedimientos que se llamen igual, porque te generaría un error, ni dos procedimientos públicos con el mismo nombre.

En tu caso, veo que quieres programar dos veces el evento al activar registro (Form_Current), pero no te hace falta, puedes poner todo el código en el mismo Private Sub, por ejemplo:

Private Sub Form_Current()

Dim vExp As Long
Dim vDef As Long
Dim vDefDescr As String
vExp = Nz(Me.id_expedient.Value, 0)
If vExp = 0 Then
Me.txtDefinicio.Value = Null
Exit Sub
End If
vDef = DLookup("[materia]", "1 assumptes", "[id_expedient]=" & vExp)
vDefDescrip = DLookup("[materia]", "materia", "[Id-materia]=" & vDef)
Me.txtDefinicio.Value = vDefDescrip

With Me
If Not IsNull(Me.datarxiu.Value) Then
.datarxiu.BackStyle = 1
.datarxiu.BackColor = vbYellow
Else
.datarxiu.BackStyle = 0
End If
End With

End Sub

Ojo, que lo que te pongo yo es sólo una idea, igual no es el mejor orden del código, pues tienes por ahí un exit sub, que si se ejecuta ya no te colorearía el fondo...

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas