Saltar al contenido

Commandbutton


Recommended Posts

publicado

Buenas tardes.
Necesito ayuda en un tema, tengo un archivo de toma de datos, en la cual quiero incluir un botón que al pulsar me guarde todos los datos en una tabla mediante una macro que ya engo creada. Lo que necesito es que el botón de guardar se active/desactive dependiendo del texto que aparece en una o varias celdas, es decir si en la celda F5 aparece un texto se desactive el botón, pero si la celda F5 está vacía se active el botón, gracias de antemano.

publicado

Lo lamento, no conozco una forma de deshabilitar el icono de guardar, tal vez algún Maestro pueda compartir algo que nos enseñe a los demás miembros del foro en base a tu consulta.

Lo que puedo aportar al tema es utilizar el evento Workbook_BeforeSave que puede validar si en F5 hay un texto para permitir o no si se guarda el libro. Incluso puedes poner un mensaje de aviso:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Revisamos si la celda F5 está vacía
    If Worksheets("NombreDeLaHoja").Range("F5").Value = "" Then
        ' Si la celda F5 está vacía, permitimos guardar el libro
        Cancel = False
    Else
        ' Si la celda F5 no está vacía, cancelamos la operación de guardar
        Cancel = True
        MsgBox "No puedes guardar el libro mientras la celda F5 no esté vacía.", vbInformation
    End If
End Sub

S6OOY.gif

publicado
hace 17 minutos , Israel Cassales dijo:

Lo lamento, no conozco una forma de deshabilitar el icono de guardar, tal vez algún Maestro pueda compartir algo que nos enseñe a los demás miembros del foro en base a tu consulta.

Lo que puedo aportar al tema es utilizar el evento Workbook_BeforeSave que puede validar si en F5 hay un texto para permitir o no si se guarda el libro. Incluso puedes poner un mensaje de aviso:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    ' Revisamos si la celda F5 está vacía
    If Worksheets("NombreDeLaHoja").Range("F5").Value = "" Then
        ' Si la celda F5 está vacía, permitimos guardar el libro
        Cancel = False
    Else
        ' Si la celda F5 no está vacía, cancelamos la operación de guardar
        Cancel = True
        MsgBox "No puedes guardar el libro mientras la celda F5 no esté vacía.", vbInformation
    End If
End Sub

S6OOY.gif

Sería algo así más o menos, tengo creada una macro con un commandbutton que al clickar me manda los datos a otra tabla, lo que necesito es o desactivar el botón o que pare la macro de guardar y lance el mensaje de faltan datos o algo así, y no guarde los datos en la otra tabla mientras F5 tenga texto, solo permita continuar la macro si F5 está vacia

publicado

Entiendo, entonces para darte una idea podrías hacer algo así:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("F5")) Is Nothing Then
        If Me.Range("F5").Value = "" Then
            Me.CommandButton1.Enabled = True
        Else
            Me.CommandButton1.Enabled = False
        End If
    End If
End Sub

Algo similar a esto debería ser suficiente, solo deberías personalizar un poco y recuerda reemplazar CommandButton1 con el nombre de tu CommandButton. ¡Ah! Y este código debe ser colocado en el módulo de la hoja de cálculo donde deseas que ocurra este comportamiento.

Haz pruebas, comparte los avances o complicaciones que tengas aquí en el foro y con gusto si estoy conectado intentaré ayudarte o alguno de los Grandes Maestros que están en el foro seguro podrán ampliar las soluciones.

publicado
hace 1 minuto , Israel Cassales dijo:

Entiendo, entonces para darte una idea podrías hacer algo así:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("F5")) Is Nothing Then
        If Me.Range("F5").Value = "" Then
            Me.CommandButton1.Enabled = True
        Else
            Me.CommandButton1.Enabled = False
        End If
    End If
End Sub

Algo similar a esto debería ser suficiente, solo deberías personalizar un poco y recuerda reemplazar CommandButton1 con el nombre de tu CommandButton. ¡Ah! Y este código debe ser colocado en el módulo de la hoja de cálculo donde deseas que ocurra este comportamiento.

Haz pruebas, comparte los avances o complicaciones que tengas aquí en el foro y con gusto si estoy conectado intentaré ayudarte o alguno de los Grandes Maestros que están en el foro seguro podrán ampliar las soluciones.

Muchas gracias, luego hago las pruebas y comentaré si funcionó o no

publicado
hace 1 hora, Mario1983 dijo:

Muchas gracias, luego hago las pruebas y comentaré si funcionó o no

Sigue sin funcionar me, a ver si con esto es más fácil, tengo está macro creada

Sub GUARDAR_EN_TABLA()

Application.ScreenUpdating = False

Dim HojaOrigen As Worksheet

Dim TablaOrigen As ListObject

 

Dim HojaDatos As Worksheet

Dim Tabla As ListObject

Dim NuevaFila As ListRow

Dim FilasOrigen, i

Dim Pregunta As Byte

 

 

Set HojaOrigen = ThisWorkbook.Sheets("LISTADO")

Set TablaOrigen = HojaOrigen.ListObjects("TablaOrigen")

FilasOrigen = TablaOrigen.ListRows.Count

Set HojaDatos = ThisWorkbook.Sheets("hoja3")

Set Tabla = HojaDatos.ListObjects("TablaDatos")

 

For i = 1 To FilasOrigen

    Set NuevaFila = Tabla.ListRows.Add

    

    With TablaOrigen.ListRows(i)

        NuevaFila.Range(1) = .Range(1).Value

        NuevaFila.Range(2) = .Range(2).Value

        NuevaFila.Range(3) = .Range(3).Value

        NuevaFila.Range(4) = .Range(4).Value

        NuevaFila.Range(5) = .Range(5).Value

        NuevaFila.Range(6) = .Range(6).Value

        NuevaFila.Range(7) = .Range(7).Value

    

   End With

 

 

 

Next i

 

MsgBox "Se guardaron los valores en Tabla Destino", vbInformation

 

 

Exit Sub

End Sub

Lo que necesito es que no se ejecute si en la celda F5 hay algún dato, y si la celda F5 está vacía ejecute está macro, a ver si con esta información es más facil

publicado
hace 6 minutos , Israel Cassales dijo:

¿Esa sentencia así como esta es la que funciona? ¿Dónde hiciste el cambio? ¿Qué error te mando?

Esta secuencia cómo está funciona, haya datos o no en la celda F5 de la hoja3, lo que necesitaría es que si hay algún dato en la celda F5 de la hoja3 detenga está macro y lance algún mensaje de error, he de decir que soy un poco novato en el tema de las macros

publicado
Ahora mismo, Mario1983 dijo:

he de decir que soy un poco novato en el tema de las macros

Entiendo, entonces no has intentado colocar la recomendación en el código o algo parecido?

publicado
Sub GUARDAR_EN_TABLA()

    If Worksheets("Hoja3").Range("F5").Value <> "" Then
        MsgBox "No puedes guardar los datos mientras la celda F5 no esté vacía.", vbInformation
        Exit Sub
    End If

    Application.ScreenUpdating = False

    Dim HojaOrigen As Worksheet
    Dim TablaOrigen As ListObject
    Dim HojaDatos As Worksheet
    Dim Tabla As ListObject
    Dim NuevaFila As ListRow
    Dim FilasOrigen, i
    Dim Pregunta As Byte

    Set HojaOrigen = ThisWorkbook.Sheets("LISTADO")
    Set TablaOrigen = HojaOrigen.ListObjects("TablaOrigen")
    FilasOrigen = TablaOrigen.ListRows.Count
    Set HojaDatos = ThisWorkbook.Sheets("hoja3")
    Set Tabla = HojaDatos.ListObjects("TablaDatos")

    For i = 1 To FilasOrigen
        Set NuevaFila = Tabla.ListRows.Add

        With TablaOrigen.ListRows(i)
            NuevaFila.Range(1) = .Range(1).Value
            NuevaFila.Range(2) = .Range(2).Value
            NuevaFila.Range(3) = .Range(3).Value
            NuevaFila.Range(4) = .Range(4).Value
            NuevaFila.Range(5) = .Range(5).Value
            NuevaFila.Range(6) = .Range(6).Value
            NuevaFila.Range(7) = .Range(7).Value
        End With

    Next i

    MsgBox "Se guardaron los valores en Tabla Destino", vbInformation

End Sub

 

publicado
hace 6 minutos , Israel Cassales dijo:

Entiendo, entonces no has intentado colocar la recomendación en el código o algo parecido?

Si, lo he intentado colocar en está macro, y no funciona, lo he colocado en la hoja3 como me dijiste y me da 2 errores, uno que me marca el end if último, si lo quito me da fallo del end sub y se me marca en amarillo la línea de private sub, y no me hace ninguna función de desactivar el Button ni nada, por eso decía si en vez de en un commandbutton, simplemente en está macro asignarle una condición de que si hay datos en la celda F5 no continúe ejecutando la macro y de un mensaje de error, como por ejemplo, atencion datos en F5. O algo asi

publicado
hace 11 minutos , Israel Cassales dijo:

Con eso debería ser suficiente.

Saludines.

Ok, mañana pruebo y te comento si ha dado resultado,que entro ahora a currar, muchas gracias por toda la ayuda

publicado
hace 14 horas, Mario1983 dijo:

Ok, mañana pruebo y te comento si ha dado resultado,que entro ahora a currar, muchas gracias por toda la ayuda

Me ha funcionado a la perfección, es justamente lo que necesitaba, muchas gracias por tu ayuda, eres un crack!!!!

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.