CheckBox
Tengo una base de datos creado en un userform con textbox, combobox, etc., toda la información que ingresa me lo manda a la hoja uno al darle insertar con un commandbutton, también con otro commandbutton con el nombre de buscar, encuentra la información que ya había insertado, hasta ahí todo bien, el problema es que tengo un checkbox que al insertar al igual que al buscar y modificar, guardo cambios pero el checkbox se queda como si lo hubiese cliqueado, como puedo resolver este problema.
Respuesta de emperador20
1
1
NO TRABAJO CON VBA, proba la lógica como si fuera en vb 6.0 y si funciona me avisas
El checkbox trabajo con valor = 0,1 fíjate que tipo de dato le estas pasando cuando lo vas a mostrar, quizás estas mandando true o false que lo tienes que frenanr con un if y decirle que valor va a tomar
Pruébalo y me avisas
El checkbox trabajo con valor = 0,1 fíjate que tipo de dato le estas pasando cuando lo vas a mostrar, quizás estas mandando true o false que lo tienes que frenanr con un if y decirle que valor va a tomar
Pruébalo y me avisas
Hola:
Pues por más que lo intento no veo cual es el problema, te mando el código que tengo en el checkbox haber si puedes ayudarme:
Private Sub CheckBox1_Click()
If CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = "X"
ElseIf Not CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = ""
End If
End Sub
Saludos y de antemano muchas gracias
Pues por más que lo intento no veo cual es el problema, te mando el código que tengo en el checkbox haber si puedes ayudarme:
Private Sub CheckBox1_Click()
If CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = "X"
ElseIf Not CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = ""
End If
End Sub
Saludos y de antemano muchas gracias
- Compartir respuesta
- Anónimo
ahora mismo
1 respuesta más de otro experto
Respuesta de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
Cópiame el código que usas para alguna de las 3 acciones y qué quieres que haga con los controles que tiene el formulario.
Hola gracias.
Este es el código que utilizo para insertar los datos:
Private Sub CommandButton1_Click()
If ComboBox1.Text = "M/A" Then
If TextBox1 = Empty Or ComboBox1 = Empty Or ComboBox2 = Empty Or ComboBox3 = Empty Or ComboBox4 = Empty Or ComboBox5 = Empty Or ComboBox6 = Empty Or ComboBox7 = Empty Or ComboBox8 = Empty Or ComboBox9 = Empty Or ComboBox10 = Empty Or ComboBox11 = Empty Then MsgBox "Faltan Datos": Exit Sub
Else
If TextBox1 = Empty Or ComboBox1 = Empty Or ComboBox2 = Empty Or ComboBox3 = Empty Or ComboBox4 = Empty Or ComboBox5 = Empty Or ComboBox6 = Empty Or ComboBox7 = Empty Or ComboBox8 = Empty Or ComboBox9 = Empty Or ComboBox10 = Empty Then MsgBox "Faltan Datos": Exit Sub
End If
Range("B11").Select
Selection.EntireRow.Insert
TextBox1 = Empty
ComboBox1 = Empty
ComboBox2 = Empty
ComboBox3 = Empty
ComboBox4 = Empty
ComboBox5 = Empty
ComboBox6 = Empty
ComboBox7 = Empty
ComboBox8 = Empty
CheckBox1 = Empty
CheckBox2 = Empty
CheckBox3 = Empty
CheckBox4 = Empty
ComboBox9 = Empty
ComboBox10 = Empty
ComboBox11 = Empty
TextBox2 = Empty
TextBox4 = Empty
TextBox1.SetFocus
ActiveWorkbook.Save
End Sub
Cuando inserto datos los checkbox se pone como si estuviese bloqueado y marcado, este es el código que tengo en un checkbox
Private Sub CheckBox1_Click()
If CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = "X"
ElseIf Not CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = ""
End If
End Sub
De antemano muchas gracias.
Este es el código que utilizo para insertar los datos:
Private Sub CommandButton1_Click()
If ComboBox1.Text = "M/A" Then
If TextBox1 = Empty Or ComboBox1 = Empty Or ComboBox2 = Empty Or ComboBox3 = Empty Or ComboBox4 = Empty Or ComboBox5 = Empty Or ComboBox6 = Empty Or ComboBox7 = Empty Or ComboBox8 = Empty Or ComboBox9 = Empty Or ComboBox10 = Empty Or ComboBox11 = Empty Then MsgBox "Faltan Datos": Exit Sub
Else
If TextBox1 = Empty Or ComboBox1 = Empty Or ComboBox2 = Empty Or ComboBox3 = Empty Or ComboBox4 = Empty Or ComboBox5 = Empty Or ComboBox6 = Empty Or ComboBox7 = Empty Or ComboBox8 = Empty Or ComboBox9 = Empty Or ComboBox10 = Empty Then MsgBox "Faltan Datos": Exit Sub
End If
Range("B11").Select
Selection.EntireRow.Insert
TextBox1 = Empty
ComboBox1 = Empty
ComboBox2 = Empty
ComboBox3 = Empty
ComboBox4 = Empty
ComboBox5 = Empty
ComboBox6 = Empty
ComboBox7 = Empty
ComboBox8 = Empty
CheckBox1 = Empty
CheckBox2 = Empty
CheckBox3 = Empty
CheckBox4 = Empty
ComboBox9 = Empty
ComboBox10 = Empty
ComboBox11 = Empty
TextBox2 = Empty
TextBox4 = Empty
TextBox1.SetFocus
ActiveWorkbook.Save
End Sub
Cuando inserto datos los checkbox se pone como si estuviese bloqueado y marcado, este es el código que tengo en un checkbox
Private Sub CheckBox1_Click()
If CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = "X"
ElseIf Not CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = ""
End If
End Sub
De antemano muchas gracias.
Veamos, los objetos 'chechkBox' contienen internamente un valor entero que puede ser:
0 - Desactivado
1 - Activado
2 - valor desconocido
Si le pones un valor "empty" estás intentando asignar un texto a un objeto numérico, por lo que te pondrá automáticamente el valor "2".
Cambia las líneas y ponle:
CheckBox1=0
para que se quede desactivado, o bien
CheckBox1=1
Para activarlo.
0 - Desactivado
1 - Activado
2 - valor desconocido
Si le pones un valor "empty" estás intentando asignar un texto a un objeto numérico, por lo que te pondrá automáticamente el valor "2".
Cambia las líneas y ponle:
CheckBox1=0
para que se quede desactivado, o bien
CheckBox1=1
Para activarlo.
Bien una respuesta aceptable, solo un detalle, gracias a ti resolví esto pero al cambiar las lineas ya no me sale la POR como en la celda como quiero, si no que me sale el 1 o el 0, como puedo resolver esto, lo deje así...:
Private Sub CheckBox1_Click()
If CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = 1
ElseIf Not CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = 0
End If
End Sub
Private Sub CheckBox1_Click()
If CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = 1
ElseIf Not CheckBox1 Then
Range("K" + Label16).Select
ActiveCell.FormulaR1C1 = 0
End If
End Sub
Primero, eres tu en el evento "_click" del checkBox el que pones la "X" o dejas la celda en blanco.
Ahora te está poniendo 1 y 0 porque así lo has puesto en el código (ActiveCell.FormulaR1C1 = 1 y lo mismo más adelante terminado en 0)
Si antes no te aparecía la 'X' será porque pondrías valor "0" al checkBox y eso según tu código dejaba la celda en blanco. Para que te ponga la "X" tendrás que poner "checkBox1 = 1" y poner bien el código de "_click".
Por cierto, en tu código dices que: si está activado el checkBox1 haz tal cosa; en caso contrario (else) vuelves a preguntar: "si no está activado el chechkBox"...
Es una consulta un poco ilógica. Si entra por el "else" es porque el checkBox no está activado, por lo que la segunda pregunta sobraría.
Otra cosa es que vayas comprobando los 3 posibles estados del checkBox, en cuyo caso tendrías que preguntar por "checkBox1 = 1" o "checkBox1 = 2" o "checkBox1 = 2".
El procedimiento del evento quedaría más claro así:
Private Sub CheckBox1_Click()
Range("K" + Label16).Select
If CheckBox1 Then
ActiveCell.FormulaR1C1 = 1
Else
ActiveCell.FormulaR1C1 = 0
End If
End Sub
Ahora te está poniendo 1 y 0 porque así lo has puesto en el código (ActiveCell.FormulaR1C1 = 1 y lo mismo más adelante terminado en 0)
Si antes no te aparecía la 'X' será porque pondrías valor "0" al checkBox y eso según tu código dejaba la celda en blanco. Para que te ponga la "X" tendrás que poner "checkBox1 = 1" y poner bien el código de "_click".
Por cierto, en tu código dices que: si está activado el checkBox1 haz tal cosa; en caso contrario (else) vuelves a preguntar: "si no está activado el chechkBox"...
Es una consulta un poco ilógica. Si entra por el "else" es porque el checkBox no está activado, por lo que la segunda pregunta sobraría.
Otra cosa es que vayas comprobando los 3 posibles estados del checkBox, en cuyo caso tendrías que preguntar por "checkBox1 = 1" o "checkBox1 = 2" o "checkBox1 = 2".
El procedimiento del evento quedaría más claro así:
Private Sub CheckBox1_Click()
Range("K" + Label16).Select
If CheckBox1 Then
ActiveCell.FormulaR1C1 = 1
Else
ActiveCell.FormulaR1C1 = 0
End If
End Sub
Me has dado un buena cátedra y de hecho cuando lo hice me preguntaba si esta bien y como en ningún momento me marcaba error decidí dejarlo así, pero como dices suena ilógico, ya lo deje como me lo pusiste pero sigo sin poder poner un "X" en mi celda lo que me pone es1 o 0 pero no la "X", perdón por la ignorancia es que soy nuevo en esto.
Saludos.
Saludos.
¿Has cambiado el procedimiento por el que te puse?
No tiene ninguna lógicca que no te esté poniendo la 'X'.
Si quieres mandame la hoja de cálculo por correo ([email protected]) y la miro para que salga bien la "X", aunque insisto en que debe ser tan sencillo como poner bien el procedimiento "CheckBox1_Click" y después inicializar la variable a 1 en lugar del 0 (CheckBox1 = 1)
No tiene ninguna lógicca que no te esté poniendo la 'X'.
Si quieres mandame la hoja de cálculo por correo ([email protected]) y la miro para que salga bien la "X", aunque insisto en que debe ser tan sencillo como poner bien el procedimiento "CheckBox1_Click" y después inicializar la variable a 1 en lugar del 0 (CheckBox1 = 1)
Creo que el problema esta en el commandbutton, ya logre lo del checkbox pero al buscar el registro, si la celda esta marcada "X" si lo encuentra pero como valor desconocido.
Este es el código que tengo en mi commandbutton
Private Sub CommandButton2_Click()
Dim intCol As Integer
Dim dblFila As Double
On Error GoTo noencontro
Cells.Find(What:=TextBox3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
intCol = ActiveCell.Column
dblFila = ActiveCell.Row
ComboBox1 = Cells(dblFila, intCol + 1)
ComboBox2 = Cells(dblFila, intCol + 2)
ComboBox3 = Cells(dblFila, intCol + 3)
ComboBox4 = Cells(dblFila, intCol + 4)
ComboBox5 = Cells(dblFila, intCol + 5)
ComboBox6 = Cells(dblFila, intCol + 6)
ComboBox7 = Cells(dblFila, intCol + 7)
ComboBox8 = Cells(dblFila, intCol + 8)
CheckBox1 = Cells(dblFila, intCol + 9)
CheckBox2 = Cells(dblFila, intCol + 10)
CheckBox3 = Cells(dblFila, intCol + 11)
ComboBox10 = Cells(dblFila, intCol + 14)
ComboBox11 = Cells(dblFila, intCol + 4)
ComboBox9 = Cells(dblFila, intCol + 16)
TextBox2 = Cells(dblFila, intCol + 17)
TextBox4 = Cells(dblFila, intCol + 15)
Label16 = ActiveCell.Row
noencontro:
End Sub
Este es el código que tengo en mi commandbutton
Private Sub CommandButton2_Click()
Dim intCol As Integer
Dim dblFila As Double
On Error GoTo noencontro
Cells.Find(What:=TextBox3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
intCol = ActiveCell.Column
dblFila = ActiveCell.Row
ComboBox1 = Cells(dblFila, intCol + 1)
ComboBox2 = Cells(dblFila, intCol + 2)
ComboBox3 = Cells(dblFila, intCol + 3)
ComboBox4 = Cells(dblFila, intCol + 4)
ComboBox5 = Cells(dblFila, intCol + 5)
ComboBox6 = Cells(dblFila, intCol + 6)
ComboBox7 = Cells(dblFila, intCol + 7)
ComboBox8 = Cells(dblFila, intCol + 8)
CheckBox1 = Cells(dblFila, intCol + 9)
CheckBox2 = Cells(dblFila, intCol + 10)
CheckBox3 = Cells(dblFila, intCol + 11)
ComboBox10 = Cells(dblFila, intCol + 14)
ComboBox11 = Cells(dblFila, intCol + 4)
ComboBox9 = Cells(dblFila, intCol + 16)
TextBox2 = Cells(dblFila, intCol + 17)
TextBox4 = Cells(dblFila, intCol + 15)
Label16 = ActiveCell.Row
noencontro:
End Sub
Si era eso santiago, lo que estaba mal era el commandbuton por fin lo logre gracias a tu valiosa ayuda, el código lo deje así:
Private Sub CommandButton2_Click()
Dim intCol As Integer
Dim dblFila As Double
On Error GoTo noencontro
Cells.Find(What:=TextBox3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
intCol = ActiveCell.Column
dblFila = ActiveCell.Row
ComboBox1 = Cells(dblFila, intCol + 1)
ComboBox2 = Cells(dblFila, intCol + 2)
ComboBox3 = Cells(dblFila, intCol + 3)
ComboBox4 = Cells(dblFila, intCol + 4)
ComboBox5 = Cells(dblFila, intCol + 5)
ComboBox6 = Cells(dblFila, intCol + 6)
ComboBox7 = Cells(dblFila, intCol + 7)
ComboBox8 = Cells(dblFila, intCol + 8)
If CheckBox1 = Cells(dblFila, intCol + 9) = 0 Then
CheckBox1 = 1
Else
CheckBox1 = 0
End If
If CheckBox2 = Cells(dblFila, intCol + 10) = 0 Then
CheckBox2 = 1
Else
CheckBox2 = 0
End If
If CheckBox3 = Cells(dblFila, intCol + 11) = 0 Then
CheckBox3 = 1
Else
CheckBox3 = 0
End If
ComboBox10 = Cells(dblFila, intCol + 14)
ComboBox11 = Cells(dblFila, intCol + 4)
ComboBox9 = Cells(dblFila, intCol + 16)
TextBox2 = Cells(dblFila, intCol + 17)
TextBox4 = Cells(dblFila, intCol + 15)
Label16 = ActiveCell.Row
noencontro:
End Sub
Como vez, estoy bien o crees que tendría que agregar algo más, las pruebas ya lo hice y me quedo excelente pero no se, quisiera tu opinión y también quisiera saber si puedo contar contigo para otra consulta, te voy a agregar como favoritos.
Gracias
Private Sub CommandButton2_Click()
Dim intCol As Integer
Dim dblFila As Double
On Error GoTo noencontro
Cells.Find(What:=TextBox3, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False).Activate
intCol = ActiveCell.Column
dblFila = ActiveCell.Row
ComboBox1 = Cells(dblFila, intCol + 1)
ComboBox2 = Cells(dblFila, intCol + 2)
ComboBox3 = Cells(dblFila, intCol + 3)
ComboBox4 = Cells(dblFila, intCol + 4)
ComboBox5 = Cells(dblFila, intCol + 5)
ComboBox6 = Cells(dblFila, intCol + 6)
ComboBox7 = Cells(dblFila, intCol + 7)
ComboBox8 = Cells(dblFila, intCol + 8)
If CheckBox1 = Cells(dblFila, intCol + 9) = 0 Then
CheckBox1 = 1
Else
CheckBox1 = 0
End If
If CheckBox2 = Cells(dblFila, intCol + 10) = 0 Then
CheckBox2 = 1
Else
CheckBox2 = 0
End If
If CheckBox3 = Cells(dblFila, intCol + 11) = 0 Then
CheckBox3 = 1
Else
CheckBox3 = 0
End If
ComboBox10 = Cells(dblFila, intCol + 14)
ComboBox11 = Cells(dblFila, intCol + 4)
ComboBox9 = Cells(dblFila, intCol + 16)
TextBox2 = Cells(dblFila, intCol + 17)
TextBox4 = Cells(dblFila, intCol + 15)
Label16 = ActiveCell.Row
noencontro:
End Sub
Como vez, estoy bien o crees que tendría que agregar algo más, las pruebas ya lo hice y me quedo excelente pero no se, quisiera tu opinión y también quisiera saber si puedo contar contigo para otra consulta, te voy a agregar como favoritos.
Gracias
Lo único que no acabo de entender es: ¿qué intentas hacer con las preguntas del tipo 'If CheckBox1 = Cells(dblFila, intCol + 9) = 0'? ¿Qué contiene la celda(dblFila,intCol+9)
Por cierto, la variable dblFila puedes declararla como 'long', no es necesario el tipo "double".
A parte de no entender esas preguntas (yo pondría siempre paréntesis para asegurarme el orden de ejecución), lo demás no parece estar mal.
Por cierto, la variable dblFila puedes declararla como 'long', no es necesario el tipo "double".
A parte de no entender esas preguntas (yo pondría siempre paréntesis para asegurarme el orden de ejecución), lo demás no parece estar mal.
- Compartir respuesta
- Anónimo
ahora mismo