¿Cómo puedo utilizar el checkbox?

Estoy usando un formulario donde contiene checkbox y de los cuales cada checkbox representan a un rango de celdas de otra hoja la cual este rango se copia y se pega en la hoja actual, el problema es que cada vez que acciono el botón de generar códigos, mediante la condicional de if trato de formular la siguiente lógica,

Private Sub CommandButton1_Click()
    'Asignando Objetos de busqueda y hojas
    Set h1 = Sheets("Plan MP")
    Set b = h1.Columns("B").Find(TextBox1, lookat:=xlWhole)
    u1 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u3 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u2 = h1.Range("B" & Rows.Count).End(xlUp).Row
    u4 = h1.Range("B" & Rows.Count).End(xlUp).Row + 11
    'Asignando condicional de validacion de codigo
    If Not b Is Nothing Then
        MsgBox " Este codigo ya esta registrado ", vbCritical, "ATENCION !"
        Unload Me
        Load MP
        MP.Show
        Else
        MsgBox " Seleccione algun casillero"
   End If
    If CheckBox1.Value = True Then
    Hoja1.Range("B4:AZ7").Copy
        h1.Range("B" & u1).PasteSpecial Paste:=xlValues
        For i = 1 To 4
      h1.Cells(u1, "B") = Me.TextBox1.Value
        h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
      h1.Cells(u1, "D") = Me.TextBox2.Value
        h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
      h1.Cells(u1, "F") = Me.TextBox3.Value
        h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
    u1 = u1 + 1
    Next i
    else CheckBox1.Value = false then
    End If
    Unload Me
    Load MP
    MP.Show
    Exit Sub
End Sub

se da a entender que si el checkbox se activa  y se da click al boton generar  se  copia el rango de celdas , hasta ahi todo bien , pero cuando escribo " else CheckBox1.Value = false then " me bota error , ahora esta bien la logica para el programa ???

1 Respuesta

Respuesta
1

Te paso la macro actualizada

Private Sub CommandButton1_Click()
'//Act. por Aortiz
    'Asignando Objetos de busqueda y hojas
    Set h1 = Sheets("Plan MP")
    Set b = h1.Columns("B").Find(TextBox1, lookat:=xlWhole)
    u1 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u3 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u2 = h1.Range("B" & Rows.Count).End(xlUp).Row
    u4 = h1.Range("B" & Rows.Count).End(xlUp).Row + 11
    'Asignando condicional de validacion de codigo
    If Not b Is Nothing Then
        MsgBox " Este codigo ya esta registrado ", vbCritical, "ATENCION !"
        Unload Me
        Load MP
        MP.Show
        Else
        MsgBox " Seleccione algun casillero"
     End If
   '
    If CheckBox1.Value = True Then
        Hoja1.Range("B4:AZ7").Copy
        h1.Range("B" & u1).PasteSpecial Paste:=xlValues
        '
        For i = 1 To 4
            h1.Cells(u1, "B") = Me.TextBox1.Value
            h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "D") = Me.TextBox2.Value
            h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "F") = Me.TextBox3.Value
            h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
            u1 = u1 + 1
        Next i
    End If
    '
    CheckBox1.Value = False
    Unload Me
    Load MP
    MP.Show
End Sub

Valora para finalizar saludos!

Gracias, otra consulta tengo, ¿cómo haría para decir que si todos los checkbox están en blanco muestre un mensaje diciendo que no ha seleccionado ninguno .?

Ahora también si lo coloco así me sale error de objeto :

Set h1 = Sheets("Plan MP")
Set b = h1.Columns("B").Find(TextBox1, lookat:=xlWhole)
u1 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
u3 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
u2 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
u4 = h1.Range("B" & Rows.Count).End(xlUp).Row + 11
'Asignando condicional de validacion de codigo
If TextBox1.Value = Empty Or TextBox2 = Empty Or TextBox3 = Empty Then
MsgBox " Asegurese de rellenar todos los casilleros ", vbCritical, "ATENCION !"
Unload Me
ElseIf Not b Is Nothing Then
MsgBox " Este codigo ya esta registrado "
End If
'
If CheckBox1.Value = True Then
Hoja1.Range("B4:AZ7").Copy
h1.Range("B" & u1).PasteSpecial Paste:=xlValues
'
For i = 1 To 4
h1.Cells(u1, "B") = Me.TextBox1.Value
h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
h1.Cells(u1, "D") = Me.TextBox2.Value
h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
h1.Cells(u1, "F") = Me.TextBox3.Value
h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
u1 = u1 + 1
Next i
End If
If CheckBox2.Value = True Then
Hoja1.Range("B8:AZ11").Copy
h1.Range("B" & u1).PasteSpecial Paste:=xlValues
For i = 1 To 5
h1.Cells(u1, "B") = Me.TextBox1.Value
h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
h1.Cells(u1, "D") = Me.TextBox2.Value
h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
h1.Cells(u1, "F") = Me.TextBox3.Value
h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
u1 = u1 + 1
Next i
End If
If CheckBox3.Value = True Then
Hoja1.Range("B12:AZ16").Copy
h1.Range("B" & u2).PasteSpecial Paste:=xlValues
For i = 1 To 5
h1.Cells(u2, "B") = Me.TextBox1.Value
h1.Cells(u2, "B").Interior.Color = RGB(255, 255, 0)
h1.Cells(u2, "D") = Me.TextBox2.Value
h1.Cells(u2, "D").Interior.Color = RGB(255, 255, 0)
h1.Cells(u2, "F") = Me.TextBox3.Value
h1.Cells(u2, "F").Interior.Color = RGB(255, 255, 0)
u2 = u2 + 1
Next i
End If
'
CheckBox1.Value = False
Unload Me
Load MP
MP.Show
End Sub

Set h1 = Sheets("Plan MP")
    Set b = h1.Columns("B").Find(TextBox1, lookat:=xlWhole)
    u1 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u3 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u2 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
    u4 = h1.Range("B" & Rows.Count).End(xlUp).Row + 11
    'Asignando condicional de validacion de codigo
    If TextBox1.Value = Empty Or TextBox2 = Empty Or TextBox3 = Empty Then
        MsgBox " Asegurese de rellenar todos los casilleros ", vbCritical, "ATENCION !"
        Unload Me
        ElseIf Not b Is Nothing Then
        MsgBox " Este codigo ya esta registrado  "
     End If
   '
    If CheckBox1.Value = True Then
        Hoja1.Range("B4:AZ7").Copy
        h1.Range("B" & u1).PasteSpecial Paste:=xlValues
        '
        For i = 1 To 4
            h1.Cells(u1, "B") = Me.TextBox1.Value
            h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "D") = Me.TextBox2.Value
            h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "F") = Me.TextBox3.Value
            h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
            u1 = u1 + 1
        Next i
    End If
    If CheckBox2.Value = True Then
    Hoja1.Range("B8:AZ11").Copy
        h1.Range("B" & u1).PasteSpecial Paste:=xlValues
        For i = 1 To 5
      h1.Cells(u1, "B") = Me.TextBox1.Value
        h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
      h1.Cells(u1, "D") = Me.TextBox2.Value
        h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
      h1.Cells(u1, "F") = Me.TextBox3.Value
        h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
    u1 = u1 + 1
    Next i
    End If
    If CheckBox3.Value = True Then
    Hoja1.Range("B12:AZ16").Copy
        h1.Range("B" & u2).PasteSpecial Paste:=xlValues
        For i = 1 To 5
      h1.Cells(u2, "B") = Me.TextBox1.Value
        h1.Cells(u2, "B").Interior.Color = RGB(255, 255, 0)
      h1.Cells(u2, "D") = Me.TextBox2.Value
        h1.Cells(u2, "D").Interior.Color = RGB(255, 255, 0)
      h1.Cells(u2, "F") = Me.TextBox3.Value
        h1.Cells(u2, "F").Interior.Color = RGB(255, 255, 0)
    u2 = u2 + 1
    Next i
    End If
    '
    CheckBox1.Value = False
    Unload Me
    Load MP
    MP.Show
End Sub

En cual línea te sale error

Te paso la macro

Private Sub CommandButton1_Click()
'//Act. Aortiz
Set h1 = Sheets("Plan MP")
    Set b = h1.Columns("B").Find(TextBox1, lookat:=xlWhole)
    If Not b Is Nothing Then
        MsgBox " Este codigo ya esta registrado "
        Exit Sub
     End If
     '
        u1 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
        u3 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
        u2 = h1.Range("B" & Rows.Count).End(xlUp).Row + 1
        u4 = h1.Range("B" & Rows.Count).End(xlUp).Row + 11
    'Asignando condicional de validacion de codigo
            If TextBox1.Value = Empty Or TextBox2 = Empty Or TextBox3 = Empty Then
            MsgBox " Asegurese de rellenar todos los casilleros ", vbCritical, "ATENCION !"
            Exit Sub
            End If
        '
            For Each chk In Me.Controls
            If TypeName(chk) = "CheckBox" Then
                If chk.Value = False Then
                     MsgBox "Seleccione un CheckBox", vbCritical
                     Exit Sub
                End If
                End If
            Next
   '
    If CheckBox1.Value = True Then
        Hoja1.Range("B4:AZ7").Copy
        h1.Range("B" & u1).PasteSpecial Paste:=xlValues
        '
        For i = 1 To 4
            h1.Cells(u1, "B") = Me.TextBox1.Value
            h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "D") = Me.TextBox2.Value
            h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "F") = Me.TextBox3.Value
            h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
            u1 = u1 + 1
        Next i
    End If
    '
    If CheckBox2.Value = True Then
    Hoja1.Range("B8:AZ11").Copy
        h1.Range("B" & u1).PasteSpecial Paste:=xlValues
        For i = 1 To 5
            h1.Cells(u1, "B") = Me.TextBox1.Value
            h1.Cells(u1, "B").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "D") = Me.TextBox2.Value
            h1.Cells(u1, "D").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u1, "F") = Me.TextBox3.Value
            h1.Cells(u1, "F").Interior.Color = RGB(255, 255, 0)
            u1 = u1 + 1
        Next i
    End If
    '
    If CheckBox3.Value = True Then
        Hoja1.Range("B12:AZ16").Copy
        h1.Range("B" & u2).PasteSpecial Paste:=xlValues
        For i = 1 To 5
            h1.Cells(u2, "B") = Me.TextBox1.Value
            h1.Cells(u2, "B").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u2, "D") = Me.TextBox2.Value
            h1.Cells(u2, "D").Interior.Color = RGB(255, 255, 0)
            h1.Cells(u2, "F") = Me.TextBox3.Value
            h1.Cells(u2, "F").Interior.Color = RGB(255, 255, 0)
            u2 = u2 + 1
        Next i
    End If
    '
    'desactiva Checkbox
    For Each chk In Me.Controls
        If TypeName(chk) = "CheckBox" Then
            chk.Value = False
        End If
    Next
    Unload Me
    Load MP
    MP.Show
End Sub

¡Gracias! 

Hola en este caso If TypeName(chk) = "CheckBox" .. funcionaria si tengo todos los nombres que empiezan por "checkbox ", ¿si tienen nombres diferentes?

No, la macro funciona sin considerar el nombre que tenga

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas