Descargas, guías, trucos, gameplays...

martes, 22 de mayo de 2012

Ejecutar código al presionar Enter en ComboBox en VBA Excel





Esta entrada es en respuesta a una consulta de la sección Ayuda VBA Excel

¿Algunas vez han deseado ejecutar código al introducir texto en un ComboBox o al seleccionar una de las entradas que ya están en él? Esto es posible al usar el evento Change del ComboBox. Sin embargo con ese evento la ejecución del código es automático y no puede decidir uno mismo cuando ejecutar el código.

La solución puede ser programar de modo que el el código se ejecute solo al presionar una tecla determinada. Normalmente se desearía que esa tecla sea Enter, pero el evento KeyPress del ComboBox no reconoce la tecla ENTER por lo tanto el siguiente código no sirve de nada:
Private Sub ComboBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If KeyAscii = 13 Then
        MsgBox "se presiono ENTER"
    End If
End Sub

La solución pasa por usar el evento KeyDown en lugar del evento KeyPress, y dejar el código así:
Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = 13 Then
        MsgBox "se presiono ENTER"
        'aquí el código que se desea ejecutar
    End If
End Sub

Vista del código:








Vista al ejecutar el código:








Vista al presionar ENTER estando en el ComboBox:








Esta consulta estaba fácil ya he ocupado esto en muchos proyectos. Gracias por consultar y espero haber ayudado


7 comentarios:

  1. Tankyu man eso es como lo que buscaba es para una tarea y no se mucho de esto.

    ¿facil? XD

    ResponderEliminar
  2. mil gracias!!!!!!!!!!!!!!

    ResponderEliminar
  3. hermano estoy muy agradecido porque encontre la solucion casi que de arepa lo que yo queria era desde un codigo que tengo dentro de una caja de texto se me van a ir los datos a un label y de aqui se cortan y copian todos los datos con un boton a diferentes cajas de texto y lo unico que hice fue cambiar el keypress por keydown y listo funciono a la perfeccion,
    el codigo es este
    Private Sub txt_dato_KeyDown(ByVal KeyAscii As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyAscii = 13 Then

    'el pequeño cambio pero indispensable Private Sub txt_dato_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)'solo esto _
    necesitaba que no fuera keypress sino keydown



    int_numero(2 - int_i) = txt_dato.Text
    int_i = int_i + 1
    lbl_numero_de_datos.Caption = int_i
    lbl_datos_ingresados = lbl_datos_ingresados & " " & txt_dato.Text
    txt_dato.Text = ""
    End If
    End Sub creo que no me habria dado cuenta sino por su codigo y haciendo ensayos que muchas gracias de ALEX Y PAOLA y que DIOS TE BENDIGA

    ResponderEliminar
    Respuestas
    1. Por nada. Que bueno que les fue de utilidad. Bendiciones.

      Y gracias por compartir el código.

      Eliminar
  4. "Muito obrigado" desde Brasil!

    ResponderEliminar
  5. ALGUIEN ME PODRIA AYUDAR POR FAVOR.
    EL INCONVENIENTE ES QUE EL COMBOBOX LO TENGO DIRECTO EN UNA HOJA DE DE EXCEL
    Y NO EN UN FORM.
    COMO PODRIA HACER PARA QUE CUANDO LE DOY ENTER EJECUTE UN CODIGO O QUE ENVIE EL FOCO A UNA CELDA QUE ES LO QUE NECESITO

    ResponderEliminar
    Respuestas
    1. Casi es lo mismo. Debes ponerle el siguiente código:

      Private Sub ComboBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then
      Cells(5, 2).Select
      End If
      End Sub

      Eliminar