Mostrar una casilla de verificación si la celda no está vacía

Resuelto
Thmoney-team Mensajes publicados 14 Estado Miembro -  
swande Mensajes publicados 7 Estado Miembro -
Hola,

busco escribir una macro que me permitiría mostrar una casilla de verificación solo si la celda a su izquierda no está vacía. No sé si es posible, pero bueno.

¡Gracias!

15 respuestas

  1. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Buenas noches,

    tus casillas de verificación son efectivamente casillas de la barra de formulario, no Activex CheckBox

    ¿y cuántos controles (casillas de verificación) se ven afectados?

    Hasta luego
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    1
  2. Thmoney-team Mensajes publicados 14 Estado Miembro
     
    Sí, son los que están en la pestaña de desarrollador bajo la opción de control de formulario. En cuanto al número, diría que alrededor de veinte.

    ¡Gracias!
    0
  3. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    es posible escribir un código más técnico, pero ciertamente más difícil de adaptar. Suponiendo que tu columna de entrada es la columna B y que en la fila 3 creas una casilla de verificación llamada Casilla de verificación 3 (pero puedes renombrarlas a tu gusto)
    la línea de código sería
    If Target.Address(0, 0) = "B3" And Target <> "" Then Shapes("Casilla de verificación 3").Visible = True '
    If Target.Address(0, 0) = "B3" And Target = "" Then Shapes("Casilla de verificación 3").Visible = False

    a continuación un ejemplo para gestionar las celdas B3, B4, B5 y B6 para casillas de verificación nombradas Casilla de verificación 3, Casilla de verificación 4, Casilla de verificación 5 y Casilla de verificación 6
    este código debe colocarse en las propiedades de la hoja (clic derecho en la pestaña de la hoja correspondiente/Ver código

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Address(0, 0) = "B3" And Target <> "" Then Shapes("Casilla de verificación 3").Visible = True '
    If Target.Address(0, 0) = "B3" And Target = "" Then Shapes("Casilla de verificación 3").Visible = False
    If Target.Address(0, 0) = "B4" And Target <> "" Then Shapes("Casilla de verificación 4").Visible = True '
    If Target.Address(0, 0) = "B4" And Target = "" Then Shapes("Casilla de verificación 4").Visible = False
    If Target.Address(0, 0) = "B5" And Target <> "" Then Shapes("Casilla de verificación 5").Visible = True '
    If Target.Address(0, 0) = "B5" And Target = "" Then Shapes("Casilla de verificación 5").Visible = False
    If Target.Address(0, 0) = "B6" And Target <> "" Then Shapes("Casilla de verificación 6").Visible = True '
    If Target.Address(0, 0) = "B6" And Target = "" Then Shapes("Casilla de verificación 6").Visible = False
    End Sub

    A+
    Mike-31

    Un periodo de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
    1. Thmoney-team Mensajes publicados 14 Estado Miembro
       
      Hola,

      Gracias por esta respuesta. Si entiendo bien, debo pegar las líneas que escribiste en "Visualizar el código", cerrar el Visual Basic y cuando escriba en la celda B3, B4, B5 o B6 aparecerá una casilla de verificación?


      ¡Gracias de nuevo!
      0
  4. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    hay que empezar por crear tus casillas de verificación y identificar sus nombres o nombrarlas luego. Después pegas este código en las propiedades de tu hoja y asignas en el código una casilla de verificación a una referencia de celda.

    --
    A+
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
  5. Thmoney-team Mensajes publicados 14 Estado Miembro
     
    Cuando cierro la ventana de VBA, las casillas de verificación no desaparecen. ¿Debo borrarlas o mi fórmula está mal escrita?

    Aquí está mi libro: https://www.cjoint.com/?3JjsoZ5uZPI

    ¡Gracias!
    0
  6. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    varias errores, para empezar tu primera casilla de verificación no es Casilla de verificación 1, sino la Casilla de verificación 274, el nombre de la casilla se muestra en la barra de direcciones en la parte superior izquierda de tu hoja cuando haces clic derecho sobre la casilla.

    además, estás utilizando la sintaxis
    Private Sub Worksheet_Activate()

    lo cual no se ajusta con el código hecho para la sintaxis
    Private Sub Worksheet_Change(ByVal Target As Range)

    ¿entonces qué quieres hacer, que la casilla se muestre o se oculte cuando intervienes en la columna F o hay que hacer un bucle para controlar cada celda de la columna F y actuar en consecuencia cuando activas la hoja o lanzar el procedimiento con un botón

    --
    A+
    Mike-31

    Un período de fracaso es un momento perfecto para sembrar las semillas del conocimiento.
    0
  7. Thmoney-team Mensajes publicados 14 Estado Miembro
     
    ¡Wow, muchas gracias! Funciona perfectamente.

    ¡Buen día!
    0
  8. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    Si tus expectativas están satisfechas, cambia el estado de la conversación a resuelta, o confírmame que lo haga por ti.

    --
    A+
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
  9. swande
     
    Hola,

    Tengo una necesidad similar a la misma macro, pero tengo una variante diferente.
    Me explico:
    Esta macro funciona muy bien en condiciones normales (es decir, si ingreso manualmente en la celda objetivo B3 "1", la casilla de verificación aparece y si ingreso manualmente "0" en la celda B3, la casilla de verificación desaparece). Sin embargo, mi celda B3 contiene una fórmula "si" que devuelve como respuesta "1" o "0" y por una razón que desconozco, esta fórmula no hace funcionar la macro, a pesar de que la fórmula devuelve el resultado 1 si es verdadero y 0 si es falso.

    ¿Tendría alguna otra solución que proponer?

    Gracias,
    0
    1. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
       
      Buenas noches,

      seguramente es un problema de formato, necesitaríamos tener tu fórmula completa y aún mejor el archivo para verlo.
      intenta añadir al final de tu fórmula condicional *1 (multiplicar por 1)
      0
  10. swande Mensajes publicados 7 Estado Miembro
     
    Voici un exemple de ce que j'essaie de faire.
    0
  11. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    Sí, pero aparte de que no has adjuntado tu archivo, haz clic en este enlace, luego en "examinar" para seleccionar tu archivo, en "crear el enlace" y pega en una respuesta el enlace generado.
    https://www.cjoint.com/
    --
    A+
    Mike-31

    Un período de fracaso es un momento soñado para sembrar las semillas del conocimiento.
    0
    1. swande Mensajes publicados 7 Estado Miembro
       
      http://www.cjoint.com/c/FBkt0pIKg8f

      Gracias por tu ayuda, estoy familiarizándome con el sitio.
      0
  12. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    Si entiendo bien tu petición, prueba con este código

    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error Resume Next
    If Target.Address(0, 0) = "C3" And Target = 1 Then Shapes("Casilla de verificación 1").Visible = True '
    If Target.Address(0, 0) = "C3" And Target <> 1 Then Shapes("Casilla de verificación 1").Visible = False
    End Sub

    si no es esto lo que buscas, explica tus expectativas
    --
    A+
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
    1. swande Mensajes publicados 7 Estado Miembro
       
      No es del todo eso.

      Vuelvo a enviar un archivo con exactamente lo que me gustaría y con la macro correcta en función de la celda D5. No consigo entender por qué la casilla de verificación no aparece dado que la celda D5 <>""

      https://www.cjoint.com/c/FBkvWeuakHf
      0
  13. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    tu código no puede funcionar porque la acción Worksheet_Change(ByVal Target As Range) que se realiza en la celda C3, C5 como D5 no es el resultado de una fórmula, no de la acción Change

    --
    A+
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
    1. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
       
      Re,
      Elimina la fórmula en D5 que es innecesaria, reemplaza tu código por este y prueba

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If [C5] = "Enmienda" Then Shapes("Casilla de verificación 1").Visible = True '
      If [C5] <> "Enmienda" Then Shapes("Casilla de verificación 1").Visible = False
      End Sub


      y si quieres probar la celda C3, lo cual es más lógico porque es esta celda la que condiciona C5

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If [C3] = 1 Then Shapes("Casilla de verificación 1").Visible = True '
      If [C3] <> 1 Then Shapes("Casilla de verificación 1").Visible = False
      End Sub
      0
    2. swande Mensajes publicados 7 Estado Miembro
       
      ¡Fantástico! Funciona de maravilla y gracias por la pequeña lección sobre los eventos de Excel.
      0
    3. swande Mensajes publicados 7 Estado Miembro
       
      Sin embargo, la tecla Ctrl Z ya no funciona.
      0
  14. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    RE,

    no tiene nada que ver con el código, Ctrl y Z corresponde a Deshacer la última acción y Ctrl y Y corresponde a Rehacer la última acción
    una vez más el código VBA no tiene nada que ver con este problema reinicia tu ordenador a ver

    --
    A+
    Mike-31

    Un período de fracaso es un momento ideal para sembrar las semillas del conocimiento.
    0
    1. swande Mensajes publicados 7 Estado Miembro
       
      https://www.cjoint.com/c/FBlrfbqh4Jf

      Creo que tiene que ver con el código, porque cuando quito la macro, mi Ctrl Z funciona.... Por ejemplo, en el archivo, si en la celda B8 pongo 10 000$ y quiero calcular según un monto de 15 000$ para luego volver a los 10 000$, no puedo hacerlo con un Ctrl Z (ni siquiera Ctrl Y funciona).

      Ya reinicié la computadora y probé en un archivo en blanco, el Ctrl Z funciona bien. Así que me cuesta explicar por qué.
      0
  15. Mike-31 Mensajes publicados 18405 Fecha de registro   Estado Colaborador Última intervención   5 147
     
    Re,

    Modifica el código así:
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [C3]) Is Nothing Then
    If [C5] <> "" Then Shapes("Casilla de verificación 1").Visible = True '
    If [C5] = "" Then Shapes("Casilla de verificación 1").Visible = False
    End If
    End Sub

    --
    A+
    Mike-31

    Un periodo de fracaso es un momento soñado para sembrar las semillas del conocimiento.
    0
    1. swande Mensajes publicados 7 Estado Miembro
       
      ¡Efectivamente, funciona! La única cosa es que debo seleccionar la casilla con mi cursor, pero eso es solo un detalle.

      ¡Mil gracias!!!!
      0