Tengo una macro teclado numérico

Tengo un teclado numérico en un userform que rellena un textbox. Tengo 2 textbox y lo que ocupo es que ese teclado me sirva para para poder escribir ya sea en uno o en el otro al darle click al texbox que deseo.

No logro conseguirlo. Solo me escribe en uno o en los 2 al mismo tiempo y no quiero crear 2 teclado para cada textbox.

Private Sub cmd0_Click()
    Clear
    Text1.Text = Text1.Text & "0"
End Sub
Private Sub cmd1_Click()
    Clear
    Text1.Text = Text1.Text & "1"
End Sub
Private Sub cmd2_Click()
    Clear
    Text1.Text = Text1.Text & "2"
End Sub
Private Sub cmd3_Click()
    Clear
    Text1.Text = Text1.Text & "3"
End Sub
Private Sub cmd4_Click()
    Clear
    Text1.Text = Text1.Text & "4"
End Sub
Private Sub cmd5_Click()
    Clear
    Text1.Text = Text1.Text & "5"
End Sub
Private Sub cmd6_Click()
    Clear
    Text1.Text = Text1.Text & "6"
End Sub
Private Sub cmd7_Click()
    Clear
    Text1.Text = Text1.Text & "7"
End Sub
Private Sub cmd8_Click()
    Clear
    Text1.Text = Text1.Text & "8"
End Sub
Private Sub cmd9_Click()
    Clear
    Text1.Text = Text1.Text & "9"
End Sub
Private Sub cmdc_Click()
    Form_Load
End Sub
Private Sub cmdce_Click()
    Text1.Text = ""
End Sub
Private Sub cmdmc_Click()
    M = 0
    lblmem.Caption = ""
End Sub
Private Sub cmdsign_Click()
    If blnsign = False Then
        Text1.Text = "-" & Text1.Text
        blnsign = True
    Else
        Text1.Text = Val(Mid(Text1.Text, 2))
        blnsign = False
    End If
End Sub
Private Sub cmdadd_Click()
    Cal
    Flag = "add"
End Sub
Private Sub cmdequal_Click()
    Select Case Flag
        Case "add"
            C = A + Val(Text1.Text)
            Text1.Text = C
        Case "divide"
            C = A / Val(Text1.Text)
            Text1.Text = C
        Case "multiply"
            C = A * Val(Text1.Text)
            Text1.Text = C
        Case "minus"
            C = A - Val(Text1.Text)
            Text1.Text = C
        End Select
    Flag = ""
    A = 0
    B = 0
    C = 0
End Sub
Private Sub cmdsqrt_Click()
    Text1.Text = Sqr(Text1.Text)
End Sub
Private Sub Form_Load()
    'mnuItemPaste.Enabled = False
    Text1.Text = ""
    A = 0
    B = 0
    C = 0
    M = 0
    Flag = ""
    blnsign = False
    Cl = False
End Sub
Private Sub mnuItemCopy_Click()
    mnuItemPaste.Enabled = True
End Sub

1 respuesta

Respuesta
2

Esta puede ser una opción.

Al principio de todo tu código pon la siguiente línea:

Dim salida As MSForms.TextBox

Estamos declarando la variable salida como una variable global, será del tipo textbox.

Tus botones del 0 al 1 quedarían de esta forma:

Private Sub cmd0_Click()
    clear
    salida.Text = salida.Text & "0"
End Sub
Private Sub cmd1_Click()
    clear
    salida.Text = salida.Text & "1"
End Sub
Private Sub cmd2_Click()
    clear
    salida.Text = salida.Text & "2"
End Sub
Private Sub cmd3_Click()
    clear
    salida.Text = salida.Text & "3"
End Sub
Private Sub cmd4_Click()
    clear
    salida.Text = salida.Text & "4"
End Sub
Private Sub cmd5_Click()
    clear
    salida.Text = salida.Text & "5"
End Sub
Private Sub cmd6_Click()
    clear
    salida.Text = salida.Text & "6"
End Sub
Private Sub cmd7_Click()
    clear
    salida.Text = salida.Text & "7"
End Sub
Private Sub cmd8_Click()
    clear
    salida.Text = salida.Text & "8"
End Sub
Private Sub cmd9_Click()
    clear
    salida.Text = salida.Text & "9"
End Sub

Al final de todo tu código y por cada Textbox que quieras editar pon lo siguiente:

Private Sub Text1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Set salida = Text1
End Sub
'
Private Sub Text2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Set salida = Text2
End Sub

Funciona de esta forma, primero selecciona el textbox que quieras editar, después presiona el botón del 0 al 9; entonces cuando sales del textbox seleccionado, en la variable salida queda establecido el textbox del cual saliste. Por ejemplo, selecciona el Text1, luego presiona el botón 0, la macro pondrá un 0 en el text1, desde ese momento puedes seguir agregando números en el text1, si ahora quieres agregar números en el text2, entonces selecciona el text2 y después presiona el botón del número que desees.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

¿Cuándo me dices que al final de la macro agregue lo ultimo te refieras al final de la macro que te escribí?. Porque no hago que me funcione cuando presiono el numero me da error de ejecución.

Disculpa mi insistencia pero soy novato en esto. No se que parte de mi macro estará mal que no hace que funcione bien.

¿Es así como tiene que quear?

Porque no me funciona.

Private Sub cmd0_Click()
    Clear
    salida.Text = salida.Text & "0"
End Sub
Private Sub cmd1_Click()
    Clear
    salida.Text = salida.Text & "1"
End Sub
Private Sub cmd2_Click()
    Clear
    salida.Text = salida.Text & "2"
End Sub
Private Sub cmd3_Click()
    Clear
    salida.Text = salida.Text & "3"
End Sub
Private Sub cmd4_Click()
    Clear
    salida.Text = salida.Text & "4"
End Sub
Private Sub cmd5_Click()
    Clear
    salida.Text = salida.Text & "5"
End Sub
Private Sub cmd6_Click()
    Clear
    salida.Text = salida.Text & "6"
End Sub
Private Sub cmd7_Click()
    Clear
    salida.Text = salida.Text & "7"
End Sub
Private Sub cmd8_Click()
    Clear
    salida.Text = salida.Text & "8"
End Sub
Private Sub cmd9_Click()
    Clear
    salida.Text = salida.Text & "9"
End Sub
Private Sub cmdc_Click()
    Form_Load
End Sub
Private Sub cmdce_Click()
    Text.Text = ""
End Sub
Private Sub cmdmc_Click()
    M = 0
    lblmem.Caption = ""
End Sub
Private Sub cmdsign_Click()
    If blnsign = False Then
        Text.Text = "-" & Text.Text
        blnsign = True
    Else
        Text.Text = Val(Mid(Text.Text, 2))
        blnsign = False
    End If
End Sub
Private Sub cmdadd_Click()
    Cal
    Flag = "add"
End Sub
Private Sub cmdequal_Click()
    Select Case Flag
        Case "add"
            C = A + Val(Text.Text)
            Text.Text = C
        Case "divide"
            C = A / Val(Text.Text)
            Text.Text = C
        Case "multiply"
            C = A * Val(Text.Text)
            Text.Text = C
        Case "minus"
            C = A - Val(Text.Text)
            Text.Text = C
        End Select
    Flag = ""
    A = 0
    B = 0
    C = 0
End Sub
Private Sub cmdsqrt_Click()
    Text.Text = Sqr(Text.Text)
End Sub
Private Sub Form_Load()
    'mnuItemPaste.Enabled = False
    Text.Text = ""
    A = 0
    B = 0
    C = 0
    M = 0
    Flag = ""
    blnsign = False
    Cl = False
End Sub
Private Sub mnuItemCopy_Click()
    mnuItemPaste.Enabled = True
End Sub
Private Sub Text1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Set salida = Text1
End Sub
'
Private Sub Text2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Set salida = Text2
End Sub

Ya lo resolví. Gracias me falto.

Dim salida As MSForms.TextBox

Ahora que puedo hacer para que borre en el texbox seleccionado? Que se pueda borrar uno por uno los numero. asi como lo tengo solo borra tex1.

Con gusto te ayudo con todas tus peticiones.

Pero antes debes valorar la respuesta. Al final de mi respuesta hay un botón para valorar: "Votar" y "Excelente"


Debes hacer lo mismo, selecciona el textbox que quieres borrar, luego presiona el botón limpiar, o no sé cómo lo quieras limpiar.

Puede ser

Salida.value = ""

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas