Cree múltiples casillas de verificación al instante con VBA
Las casillas de verificación colocadas en el frente de la hoja de cálculo son una excelente manera para que los usuarios interactúen con una hoja de cálculo. Cada casilla de verificación se puede vincular a una celda, de modo que cuando se hace clic en ella, el valor de la celda cambia entre VERDADERO y FALSO.
Pero si tienes muchas casillas de verificación para crear, se convierte en una verdadera molestia; simplemente hay demasiadas configuraciones para establecer para cada casilla de verificación. Si tengo que crear más de 2, entonces me quejo por dentro debido al proceso ineficiente para configurar cada caja individualmente.
Entonces creé algo de VBA para usarlo en mi Libro de macros personal. Cuando se ejecute la macro, creará, vinculará, desbloqueará y alineará tantas casillas de verificación como necesite en segundos. Eso me hace feliz
Cómo funciona el código VBA
Cuando se ejecuta el siguiente código VBA, se mostrarán dos cuadros de entrada.
Desde el primer cuadro de entrada, seleccione el rango de celdas en las que crear las casillas de verificación y luego haga clic en Aceptar. En la captura de pantalla siguiente, se crearán 30 casillas de verificación, una en cada celda de A1 a C10.
El segundo cuadro de entrada (que se muestra a continuación) establecerá el valor predeterminado.
- Verdadero o 1 = marcado
- Falso o 0 = Sin marcar
Una vez completado, haga clic en Aceptar.
La macro ahora creará todas las casillas de verificación, lo que supone un fantástico ahorro de tiempo.
Tenga cuidado; Si selecciona un rango grande (como una columna o fila completa), puede llevar algún tiempo ya que Excel crea las casillas de verificación una por una.
El código VBA: cree varias casillas de verificación
Copie el siguiente código en un módulo estándar, luego ejecute la macro titulada CreateCheckBoxes.
Sub CreateCheckBoxes()'Declarar variablesDim c Como RangeDim chkBox As CheckBoxDim ansBoxDefault como LongDim chkBoxRange As RangeDim chkBoxDefault As Boolean'Ingore errores si el usuario hace clic en Cancelar o XOn Error Reanudar Siguiente'Usar cuadro de entrada para seleccionar celdasEstablecer chkBoxRange = Application.InputBox(Pregunta:= "Seleccionar rango de celdas", _ Título:="Crear casillas de verificación", Tipo:=8)'Salga del código si el usuario hace clic en Cancelar o XIf Err.Number 0 Luego salga de Sub'Utilice MessageBox para seleccionar marcado o no marcadoansBoxDefault = MsgBox("Debería ¿Las casillas están marcadas?", vbYesNoCancel, _ "Crear casillas de verificación") Si ansBoxDefault = vbYes Entonces chkBoxDefault = TrueSi ansBoxDefault = vbNo Entonces chkBoxDefault = FalseSi ansBoxDefault = vbCancel Luego salga de Sub'Activar nuevamente la verificación de erroresEn caso de error Ir a 0'Recorrer cada celda en las celdas seleccionadasPara cada c En chkBoxRange 'Crea la casilla de verificación Establece chkBox = chkBoxRange.Parent.CheckBoxes.Add(0, 1, 1, 0) Con chkBox 'Establece la posición de la casilla de verificación según la celda .Top = c.Top + c.Height / 2 - chkBox.Height / 2 .Left = c.Left + c.Width / 2 - chkBox.Width / 2 'Establece el nombre de la casilla de verificación según la dirección de la celda .Name = c.Address 'Establecer la celda vinculada a la celda con la casilla de verificación .LinkedCell = c.Offset(0, 0).Address(external:=True) 'Habilite la casilla de verificación que se usará cuando se aplique la protección de la hoja de trabajo. Locked = False 'Establezca el título en blanco. Caption = "" End With 'Establece la celda con el valor predeterminado c.Value = chkBoxDefault 'Oculta el valor en la celda con formato numérico c.NumberFormat = ";;;"Next cEnd Sub
En el código anterior he asumido ciertas configuraciones:
- El título debe estar en blanco, ya que normalmente uso la celda al lado de la casilla de verificación como título.
- La casilla de verificación no está bloqueada, por lo tanto, cuando la hoja de trabajo esté protegida, la casilla seguirá funcionando.
- El nombre de la casilla de verificación es la dirección de la celda en la que se encuentra.
- La celda vinculada es la misma que la celda que contiene la casilla de verificación, pero el formato del número ocultará el valor al usuario.
- La ubicación de la casilla de verificación está centrada en la celda.
El código VBA: eliminar varias casillas de verificación
Habiendo creado muchas casillas de verificación, el siguiente problema al que podría enfrentarse es cómo eliminar muchas casillas de verificación.
Eliminar todas las casillas de verificación
El siguiente código VBA eliminará todas las casillas de verificación de la hoja activa.
Sub EliminarAllCheckBoxes()ActiveSheet.CheckBoxes.DeleteEnd Sub
Si bien esto eliminará todas las casillas de verificación, no eliminará el valor de la celda vinculada. Por lo tanto, la siguiente macro puede ser más apropiada.
Eliminar algunas casillas de verificación
Si solo desea eliminar algunas casillas de verificación, el siguiente código VBA será suficiente. Un cuadro de entrada le pedirá un rango de celdas; estas son las celdas de las que se eliminarán las casillas de verificación.
Sub DeleteCheckBoxesInRange()'Crear variablesDim c As RangeDim chkBox As CheckBoxDim chkBoxRange As Range'Ingresar errores si el usuario hace clic en Cancelar o XOn Error Reanudar Siguiente'Usar cuadro de entrada para seleccionar celdasEstablecer chkBoxRange = Application.InputBox(Prompt:="Seleccionar rango de celdas:" , _ Título:="Eliminar casillas de verificación", Tipo:=8)'Salga del código si el usuario hace clic en Cancelar o XSi es error. Número 0, luego salga de Sub'Activar nuevamente la comprobación de errores En caso de error Ir a 0'Revise cada casilla de verificación para cada chkBox en chkBoxRange .Parent.CheckBoxes 'Eliminar la casilla de verificación donde la celda que contiene la casilla de verificación se cruza con el rango seleccionado. Si no es Application.Intersect(Range(chkBox.TopLeftCell.Address), _ chkBoxRange) no hay nada, entonces 'Borrar la celda vinculada, incluido el formato chkBox.Parent. Range(chkBox.LinkedCell).Value = "" chkBox.Parent.Range(chkBox.LinkedCell).NumberFormat = "General" 'Eliminar la casilla de verificación chkBox.Delete End IfNext chkBoxEnd Sub
Nota: En la macro de arriba, es el píxel superior izquierdo de la casilla de verificación el que determina su ubicación. Incluso si la casilla de verificación se extiende a varias celdas, desde una perspectiva de VBA solo está dentro de la celda que contiene el píxel superior izquierdo.
Deja una respuesta