Me refiero a que detengas la ejecución del programa en esa línea y copies la cadena tal cual se lanza, una vez concatenados los valores, hacia la función Execute.
Sustituye la línea Execute "UPDATE ..." por:
Código:
Dim SQL As String
SQL = "UPDATE perfiles SET codperfil= '" & TxtCodigo.Text & "',nombre= '" & TxtNombre.Text & "',tipocomprobante= " & ChkTC.Value & ",comprobante= " & ChkC.Value & " ,sucursal= " & ChkS.Value & " ,perfil=" & ChkP.Value & " ,usuario=" & ChkU.Value & " ,listado= " & ChKl.Value & " ,auditoria=" & chkA.Value & " WHERE codperfil= " & TxtCodigo.Text
Debug.Print SQL
Debug.Assert False
cn.Execute SQL
Cuando ejecutes, el programa se detendrá en la línea "Debug.Assert", y tendrás en la ventana de depuración la cadena UPDATE completa. Copiala de ahí y postéala aquí, a ver qué es lo que realmente se está enviando a Execute, y te podremos ayudar mejor.