¿Como puedo hacer para que en el fondo de un control de un formulario, mientras este vacio, ponga (en atenuado) "Introduzca aqui la fecha"? Es decir seria como una ayuda para saber que hay que poner en cada campo JUAN M AFAN DE RIBERA ===================== 1- crea un control etiqueta para cada control cuadro de texto en el que quieras mostrar ese tipo de ayuda 2- esas etiquetas deberían llamarse: "lbl" y el nombre del cuadro de texto al que "pertenecerán" 3- pon esa etiqueta exactamente en la misma posición que el cuadro de texto del cual quieres mostrar el texto de ayuda, escribe el texto de ayuda y ponle una fuente, color y grosor que creas adecuado. 4- después pon este código en el formulario: '******* CODIGO ************** Dim textoEtiquetas() As String Dim numEtiquetas As Integer Private Sub Form_Load() Dim ctl As Control 'grabamos en una matriz los nombres y los 'títulos de las etiquetas con el texto de ayuda For Each ctl In Me.Controls If ctl.ControlType = acLabel Then ReDim Preserve textoEtiquetas(1, numEtiquetas) As String textoEtiquetas(0, numEtiquetas) = ctl.Name textoEtiquetas(1, numEtiquetas) = ctl.Caption numEtiquetas = numEtiquetas + 1 End If Next End Sub 'Al cambiar de registro comprobamos los valores 'de los campos del registro Private Sub Form_Current() Dim ctl As Control For Each ctl In Me.Controls 'si es un cuadro de texto... If ctl.ControlType = acTextBox Then 'si el campo contiene datos If Not IsNull(ctl.Value) Or ctl.Value <> "" Then 'borramos el título de la etiqueta Me.Controls("lbl" & ctl.Name).Caption = "" Else 'si no contiene datos 'volvemos a poner el título de la etiqueta Call escribeCaption(ctl.Name) End If End If Next End Sub 'rutina para controlar el contenido del control actual Sub controlEtiquetas() 'si contiene datos If Screen.ActiveControl <> "" Then 'borramos el titulo de la etiqueta Me.Controls("lbl" & Screen.ActiveControl.Name).Caption = "" Else 'si no, escribimos de nuevo el titulo de la etiqueta Call escribeCaption(Screen.ActiveControl.Name) End If End Sub 'rutina para recuperar el titulo de las etiquetas Sub escribeCaption(ctlName As String) Dim i As Integer For i = 0 To numEtiquetas 'si es la etiqueta correspondiente al control If textoEtiquetas(0, i) = "lbl" & ctlName Then 'escribimos el titulo de nuevo Me.Controls(textoEtiquetas(0, i)).Caption = _ textoEtiquetas(1, i) Exit For End If Next End Sub '********* FIN CODIGO ************ RESPUESTA DE EDUARDO OLAZ ========================= Otra solución parecida: Por cada control TextBox se pone un control Etiqueta, del mismo tamaño y en la misma posición que el textBox. Esta etiqueta tendrá el color de fondo blanco y el texto, por ejemplo gris oscuro. Ponemos cada etiqueta detrás de su textBox correspondiente mediante Formato>Enviar al fondo Este ejemplo de código sería para un formulario con 2 textBox, txtDato y txtFecha Lo que hago es jugar con la transparencia del textBox en los eventos Al activar registro (del formulario) Al perder el enfoque (de cada textBox) ___________________________________ Const conEstiloFondoNormal As Long = 0 Const conEstiloFondoTransparente As Long = 1 Private Sub Form_Current() AjustarControl txtDato AjustarControl txtFecha End Sub Private Sub txtDato_LostFocus() AjustarControl txtDato End Sub Private Sub txtFecha_LostFocus() AjustarControl txtFecha End Sub Sub AjustarControl(CuadroDeTexto As TextBox) If Nz(CuadroDeTexto, "") = "" Then CuadroDeTexto.BackStyle = conEstiloFondoNormal Else CuadroDeTexto.BackStyle = conEstiloFondoTransparente End If End Sub ___________________________________ RESPONDE CHEA ============= Una alternativa sería utilizar la sección correspondiente a null de la propiedad formato: formato = dd/mm/aa;;;"Introduzca una fecha " Pero, como el resultado resulta incómodo para meter datos, debemos cambiarlo en los eventos Gotfocus y Losfocus: Private Sub CampoFecha_GotFocus() Me.CampoFecha.Format = "dd/mm/yy" End Sub Private Sub CampoFecha_LostFocus() Me.CampoFecha.Format = "dd/mm/yy;;;" & Chr(34) & "Introduzca una fecha " & Chr(34) End Sub