En formulario de excel detectar si el cursor esta en determinado campo

Deseo mediante la sentencia If, detectar si el cursor esta o no en determinado campo. Esto dentro de un userform de excel (vb Excel)

Algo así:

If TextBox1.SetFocus Then

"sentencias"
End If

Así no me funciona, la he probado de otras maneras sin resultados satisfactorios.

1 Respuesta

Respuesta
2

Cuál es el objetivo final que necesitas.

Es decir, necesitas saber cuándo entras a un textbox o cuándo sales del textbox.

Colocar un comentario en una celda es el objetivo inmediato(dicha celda recibe el valor del campo de texto que le corresponde)

Dicho comentario se captura en un cuadro de texto.(una variable recoge el valor del  cuadro de texto)...

Dim Comentario1 As String

Dim fil As Long

Dim f As Range

' Comentario es el nombre del campo de texto donde se teclea el comentario

Comentario1 = Me.Comentario.Value

'Busco en una tabla un registro que viene dentro de un "combo"

Set f = Range(Cells(fila2, columna2), Cells(fila1, columna1)).Find(Me.ComboBox1.Value, , xlValues, xlWhole, , , False)
If Not f Is Nothing Then

'Ya que encontró el registro y me posiciono en la fila correspondiente ,recojo el valor de la fila actual
fil = f.Row
' Dias es el nombre de un campo del formulario
If Dias.SetFocus() = True Then

'En la fila actual y en la columna 5 debo colocar un comentario(pero no me funciona el if, lo demas si funciona)


ActiveSheet.Cells(fil, 5).AddComment.Text Comentario1
.No pudo condicionar que mande el comentario tecleado cuando este en determinado cuadro de texto (donde este el cursor)
Else
MsgBox "dato no encontrado"
End If
End If

No veo completo tu código.

Con qué ejecutas el código, ¿es un evento o un botón?

En la siguiente línea:

Set f = Range(Cells(fila2, columna2), Cells(fila1, columna1))

Cuál es el valor de fila2, columna2, fila1, columna1?

Entiendo que no es relevante para el punto, pero necesito probar todo tu código para saber cómo voy a darte una solución.

If Dias.SetFocus() = True Then

Si el textbox "Dias" tiene el foco, qué debe hacer?

Si no tiene el foto, qué debe hacer, es decir, el foco puede estar en otro textbox, si está en otro textbox, ¿qué debe hacer?


Por qué es necesario que el foco esté en el textbox "Dias", tal vez, el enfoque que le estás dando no es el correcto.

[E spero tus comentarios_

En las siguientes publicaciones, cuando pongas código en el foro, utiliza el icono para insertar código:

Se agregará un comentario a una celda en particular. Esto podrá hacerse atendiendo a cualquier campo del formulario."Dias" es un campo más del formulario(lo tome como muestra). Dependiendo el campo donde este el cursor el "comentario" sera enviado a una celda en cuestión.

Si estás en el campo "Días trabajados" y presionas el botón "Agregar comentario", en ese momento el foco se encuentra en el botón, entonces debes verificar cuando sales del textbox con el evento exit.

Copia todo el código en tu formulario.

La declaración de la variable "saliendo" debe ir al inicio de todo el código.

Te pongo un ejemplo para los textbox1 a 3. En el evento "Enter", es decir, cuando entras al textbox, la variable es igual a 0. Debes hacer esto con todos tus controles, textbox, combobox, listbox.

Para los otros commandbutton, la primer línea debe ser la variable igual a 0.

Y cuando sales del textbox, la variable es igual a un número, dicho número lo verificas en el botón y escribes en la celda que desees.

Prueba el siguiente:

Dim saliendo As Long
'
Private Sub CommandButton1_Click()
  Select Case saliendo
    Case 1: Range("A1").Value = "días"
    Case 2: Range("A2").Value = "cancelar"
    Case 3: Range("A3").Value = "semana"
  End Select
  saliendo = 0
End Sub
'
Private Sub TextBox1_Enter()
  saliendo = 0
End Sub
Private Sub TextBox2_Enter()
  saliendo = 0
End Sub
Private Sub TextBox3_Enter()
  saliendo = 0
End Sub
Private Sub TextBox4_Enter()
  saliendo = 0
End Sub
'
Private Sub CommandButton2_Click()
  saliendo = 0
  'aquí continúa el código para el botón 2
End Sub
'
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  saliendo = 1
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  saliendo = 2
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  saliendo = 3
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas