Deshabilitar cajas de texto en el formulario excel

hola aprendemos tengo este codigo para dos botones los cuales cambian de nombre al dar clic por ejemplo clic en boton1 se llama nuevo y me cambia el nombre a grabar y el otro boton2 que se llama editar y me cambia el nombre a cancelar el hecho es que el boton1 realiza lo que deseo doy clic y me deshabilita las cajas quiero hacer lo mismo con el boton2 pero ya no me ejecuta la accion este es el codigo usado para boton1 como para boton2 espero me haya hecho entender y agradezco tu ayuda que a sido muy util y eficaz

boton1

Private Sub CommandButton9_Click()
If CommandButton9.Caption = "Nuevo" Then
CommandButton9.Caption = "Grabar"
CommandButton10.Caption = "Cancelar"

end if

TextBox1.Enabled = CommandButton9 <> True 'con esta linea habilito los text
TextBox1.SetFocus

end sub

Private Sub CommandButton10_Click()
If CommandButton10.Caption = "Editar" Then
CommandButton10.Caption = "Cancelar"
CommandButton9.Caption = "Grabar"
ElseIf CommandButton10.Caption = "Cancelar" Then
CommandButton10.Caption = "Editar"
CommandButton9.Caption = "Nuevo"
End If

TextBox1.Enabled = CommandButton10 <> False 'con esto deshabilito los text

end sub

exactamente lo que hace el boton1 quiero hacerlo con el boton2 e usado diferentes tipos de codigo y no me da ningun resultado como estos:

'If commandbutton2 Then
'TextBox1.Enabled = True
'Else
'TextBox1.Enabled = False
'End If

y coloco en el evento

'Private Sub UserForm_Activate()
'ComboBox1.Enabled = False

'end sub

gracias.........................

1 Respuesta

Respuesta
1

Prueba con esto, activa el caption de los 2 botones cuando se abra el userform.

Private Sub CommandButton9_Click()
    If CommandButton9.Caption = "Nuevo" Then
        CommandButton9.Caption = "Grabar"
        CommandButton10.Caption = "Cancelar"
    End If
    TextBox1.Enabled = CommandButton9 <> True     'con esta linea habilito los text
    TextBox1.SetFocus
End Sub
Private Sub CommandButton10_Click()
    If CommandButton10.Caption = "Editar" Then
        CommandButton10.Caption = "Cancelar"
        CommandButton9.Caption = "Grabar"
        TextBox1.Enabled = True 'CommandButton10 <> False 'con esto deshabilito los text
        TextBox1.SetFocus
    ElseIf CommandButton10.Caption = "Cancelar" Then
        CommandButton10.Caption = "Editar"
        CommandButton9.Caption = "Nuevo"
        TextBox1.Enabled = False
    End If
End Sub
Private Sub UserForm_Activate()
    CommandButton9.Caption = "Nuevo"
    CommandButton10.Caption = "Editar"
End Sub  

saludos.DAM

hola complacido por tu ayuda desafortunadamente no hace nada lo que deseo es habilitar los text con el boton2 "Editar"

A mí si me habilita el textbox1 cuando presiono el botón habilitar

Este es mi archivo

https://www.dropbox.com/s/7097ixy7i9r8rj0/boton%20editar.xlsm

Dime que le faltaría

Saludos. DAM

efectivamente funciona tu archivo pero me toco inhabilitar las cajas en propiedades para que me aparezca inhabilitado los text cuando abro el formulario experto disculpame por la ignorancia pero son varias cajas de texto en un solo formulario y me gustaría evitar varias lineas de código no se si tenga que realizar otra pregunta para esto y este es el código utilizado para la función pero no me funcióna espero tu respuesta por si me aclaras o tengo que realizar otra pregunta gracias......

dim ct

For Each ct In Me.Controls
If TypeName(ct) = "textbox" Then
ct.Enabled = False
Else
ct.Enabled = True
End If
Next

Cambia todo el código de mi archivo por este nuevo código. Agrega más textbox al userform.

Private Sub CommandButton9_Click()
    If CommandButton9.Caption = "Nuevo" Then
        CommandButton9.Caption = "Grabar"
        CommandButton10.Caption = "Cancelar"
        set_textbox 1, True
        TextBox1.SetFocus
    Else
        MsgBox "Datos grabados", vbInformation
        CommandButton9.Caption = "Nuevo"
        set_textbox 2, True
    End If
End Sub
Private Sub CommandButton10_Click()
    If CommandButton10.Caption = "Editar" Then
        CommandButton10.Caption = "Cancelar"
        CommandButton9.Caption = "Grabar"
        set_textbox 1, True
        TextBox1.SetFocus
    ElseIf CommandButton10.Caption = "Cancelar" Then
        CommandButton10.Caption = "Editar"
        CommandButton9.Caption = "Nuevo"
        set_textbox 1, False
    End If
End Sub
Private Sub UserForm_Activate()
    CommandButton9.Caption = "Nuevo"
    CommandButton10.Caption = "Editar"
End Sub
Sub set_textbox(op, st)
'habilita/deshabilita todos los text
    For Each ct In Me.Controls
        If TypeName(ct) = "TextBox" Then
            If op = 1 Then ct.Enabled = st _
            Else: ct.Value = ""
        End If
    Next
End Sub

Saludos.DAM
No olvides finalizar la pregunta.

hola dam el objetivo antes de programar es el de aprender y entender la verdad me gustaría que me quedara mas claro esta lineas de código set_textbox 1, True y esta linea

Sub set_textbox(op, st) es una subrutina o es una linea y para que me sirven.

aplique este código tal cual me dijiste y no me funciono pero el anterior si me funciono es decir hace lo que deseo y como mi objetivo es el de aprender nuevas metodologías de los expertos quería de pronto ahorrame lineas de código para mi proyecto bueno en ultimas el proyecto realiza lo deseado te pido por favor ahora aclararme las dudas expuestas y termino la pregunta te agradezco mucho por tus aportes..........

Que bien que quieras aprender, con forme vayas logrando experiencia, podrás hacer código, no solamente ahorrando líneas, también haciéndolo más eficiente.

Para contestar tus dudas, Sub set_textbox(op, st). Es una subrutina que recibe 2 parámetros, el primero se llama “op” (Opción), y el segundo parámetro se llama “st” (estatus).
El primer parámetro recibe la opción 1 ó 2, si recibe la opción 1, tiene que cambiar el estatus de todos los texbox, si recibe la opción 2 tiene que limpiar todos los textbox.
El segundo parámetro recibe True o False, si el primer parámetro es 1 entonces cambia el estatus, si recibe True entonces cambia el estatus de todos los textbox a True, si recibe False, entonces cambia el estatus de todos los textbox a False.
Estas son las llamadas a la subrutina,
Cambia el estatus de todos los textbox a True
set_textbox 1, True
Limpia todos los textbox (En este caso, cuando la opción es 2, el segundo parámetro no es utilizado)
set_textbox 2, True
Cambia el estatus de todos los textbox a False
set_textbox 1, False

Saludos. DAM
No olvides finalizar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas