Múltiples checkbox en código vba

Tengo 2 mil productos cada uno linkeado con su checkbox y quiero que al marcar/desmarcar cada uno se agregue/elimine una fila en otra hoja (donde está la factura) y se ponga el código del producto. ¿Hay alguna forma de hacerlo con 1 código y no con 2 mil? Tengo el siguiente código:

Public Sub Inventario(xCheckBox As Object, sCodProd As String, PrecioU As Currency)
Dim Fila As Long
Dim Celda As Range
Dim Rango As Range

If xCheckBox.Value = True Then
Fila = Range("C" & Rows.Count).End(xlUp).Row + 1
Cells(Fila, 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
Cells(Fila, 1) = sCodProd
Else
Set Rango = Range(Cells(1, 1), Cells(1, 1).End(xlDown))
For Each Celda In Rango
If Celda = sCodProd Then
Celda.EntireRow.Delete
End If
Next Celda
End If
End Sub

Private Sub CheckBox1_Click()
Call Inventario(CheckBox1, "1001", 5.99)
End Sub
Private Sub CheckBox2_Click()
Call Inventario(CheckBox2, "1002", 5.99)
End Sub

Private Sub CheckBox3_Click()
Call Inventario(CheckBox3, "1003", 9.99)
End Sub

...

...

...

Respuesta
2

[Ho la y bienvenido a todoexpertos.

Para hacer solamente una macro para todos los checks, debemos obtener los datos resaltados en amarillo de la imagen de alguna parte.

¿En dónde tienes esos valores?, es decir, si presiono el checkbox1, ¿de la hoja puedo obtener el código y el precio?

En la misma celda del checkbox se encuentran los valores verdadero/falso dependiendo si está marcada o no la casilla, y en las columnas de al lado se encuentran el código del producto, la descripción y el precio.

Gracias!

Comprenderás que no puedo ver tus datos. Podrías poner una imagen para ver cómo están tus datos en la hoja.

Observa cómo debes poner un ejemplo:


Cómo insertar una imagen:


También confirma si los checkbox son de control ActiveX.

Cada checkbox en la propiedad LinkedCell, ¿lo tienes referenciado a una celda diferente?

Adjunto las imágenes de las 2 hojas. Los checkbox NO son de active X y cada uno está vinculado con su misma celda donde están ubicados, es decir, el checkbox de la celda A2 está vinculado con la celda A2, el checkbox de la celda A3 con la A3, y así sucesivamente.

Lo que quiero lograr al hacer click en un checkbox es que agregue una fila en la hoja "PRODUCTOS" y me traiga el código automáticamente en la columna C. Por el contrario, quiero que al desmarcar ese checkbox me elimine esa fila en la factura.

En el ejemplo de las imágenes el checkbox de A2 debería estar marcado.

Muchas gracias!

Realiza los siguiente:

1. Pon el siguiente código en un módulo:

Sub Macro_Inventario()
  Dim shp As Worksheet, shF As Worksheet
  Dim ctrl As Object
  Dim cell As Range, f As Range
  Dim sCodProd As String
  Dim i As Long, fila As Long
  '
  Set shp = Sheets("PRODUCTOS")
  Set shF = Sheets("FACTURA")
  Set ctrl = shp.Shapes(Application.Caller).OLEFormat.Object
  Set cell = shp.Range(ctrl.LinkedCell)
  i = cell.Row
  '
  sCodProd = shp.Range("B" & i).Value
  If shp.Range("A" & i).Value = True Then
    fila = shF.Range("C" & Rows.Count).End(xlUp).Row + 1
    shF.Cells(fila, 1).EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    shF.Cells(fila, "C") = sCodProd                   'Cod
    shF.Cells(fila, "D") = shp.Range("C" & i).Value   'Desc
    shF.Cells(fila, "I") = shp.Range("D" & i).Value   'Precio
  Else
    Set f = shF.Range("C:C").Find(sCodProd, , xlValues, xlWhole, , , False)
    If Not f Is Nothing Then
      f.EntireRow.Delete
    End If
  End If
End Sub

2. Selecciona todos los checkbox. Para eso, presiona la tecla F5, en la ventana "Ir a", presiona el botón "Especial..."

3. En la ventana "Ir a Especial", selecciona la opción "Objetos" y presiona el botón "Aceptar"

4. Con eso, seleccionas todos los checkbox, presiona botón derecho en cualquiera de los checks seleccionados.

5. En el menú que aparece, selecciona la opción "Asignar macro..."

6. Selecciona la macro "macro_inventario" y presiona Aceptar.

Listo, cuando presiones cualquier checkbox, insertará o eliminará la fila en la hoja "FACTURA".


Gracias Dante sos un genio!! Última pregunta: si quiero agregar en la columna J de la factura la multiplicación de la columna B (cantidad) que se ingresa manualmente y la columna I (valor unitario). Agregué esta línea de código pero me da error 

shF.Cells(fila, "J") = shF.Range("D" * "B" & i).Value

[Al final de mi respuesta hay un botón para valorar.

[No olvides valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas