Saltar al contenido

Permisos de Usuarios para formularios


Editame

Recommended Posts

publicado

hola buenas noches a todos, antes de empezar quiero decir que me puse en la tarea de buscar en cada tema relacionado a este y no encontre una respuesta veraz sobre lo que necesito por eso me atrevo a crear nuevamente este tema pero basado en Formularios.

Puntualmente tengo un archivo de excel con formularios a los cuales les quiero aplicar  permisos de usuarios para habilitar o deshabilitar algunos CommandButond del UserForm principal o Menu segun sea el usuario que ingrese, lo mas similar a este tema que encontre usa Acces y algo con ADO lo cual no tengo conocimientos y por eso no me sirvio pido por favor el redireccionamiento necesario o la ayuda necesaria para poder encontrar la solucion.

Adjuntare el archivo en el cual estoy trabajando con dos fines, el primero poder facilitar la ayuda o respuesta a mi tema y segundo compartir con los demas por si les piuede servir, es un archivo que he sacado de varias fuentes y que poco a poco he ido construyendo segun mi necesidad todavia le faltan muchisimas cosas pero creo que voy por un buen camino para llegar a tener una solucion definitiva en cuanto al manejo de una pequeña empresa.

Les agradezco de antemano la colaboracion que puedan prestarme y esperare atento cualquier solicitud de su parte.

 

NO ME DEJO ADJUNTAR EL ARCHIVO POR LA PAGINA ME BOTA UN ERROR " Ha habido un problema procesando el fichero enviado. Please contact us for assistanc"

ADJUNTO ARCHIVO POR DROPBOX 

https://www.dropbox.com/s/x6yxte77kinxblo/CONTABLE - copia.xlsm?dl=0

publicado

Hola Editame,

Lo tengo hecho en access. Te voy a dar la idea para ver si lo puedes hacer tu. Si luego puedo te pongo algo mas. O si te atascas en algo pregunta.

En mi caso lo hice con los formularios no con los commandbutton. Osea que cuando un usuario va abrir un formulario, dependiendo el nivel que tenga le dejo o no.

Cuando identificas la entrada en el Form LOGIN, ¿Guardas el usuario que ha entrado en algun sitio? ES NECEsARIO. En mi caso lo guardo en una tabla access.

En este caso yo pondria en el form donde quieres que te deasactive los command button, una etiqueta (label) con el típico "USUARIO CONECTADO: JUAN PEPITO".

A la hoja usuario le pondria una columna nueva que se llame por ejemplo NIVEL.(del 1 al 5 por ejemplo, fue mi caso)

Y a cada formulario le doy un nivel en su propiedad tag. En access los formularios tienen la propiedad tag que sirve como información adicional de los formularios. Excel tambien la tiene, la veras en las propiedades del userform. Pues te vas a las propiedades de tus formularios y escribes el la propiedad tag el nivel que quieres que necesite el usuario que va a abrirlo.

En los eventos de los Open_Form de todos los formularios, evaluas el nivel del usuario con el del formulario y si es mayor o igual le dejas y sino no.

 

Ufff espero que me haya explicado:mad:

EDITO: Luego pensando me he dado cuenta que los formularios en excel no tienen el evento al Abrir , ASí que no sirve mi ejemplo, lo borro.

En acces el evento alAbrir te da la opcion de cancelar y en mi caso si el usuario no tenia suficiente nivel cancelaba y no se abria. Pero excel no se puede solo tiene el evento initialize y no se puede cancelar así que no se puede leer la informacion tag del formulario.

 

 

 

 

 

publicado

Mira esto, He quitado formularios por que sino no lo podia colgar.

Solo dejo dos en los cuales he cambiado el color de los botones. Si entras como administrador puedes abrir los dos si entras como el otro usuario solo puedes abrir uno de ellos.

 

 

publicado
Cita

ikanni dijo: "Pero excel no se puede solo tiene el evento initialize y no se puede cancelar así que no se puede leer la informacion tag del formulario".

 

Pero en el evento Activate, si.

publicado

Hola Ikanni agradezco tu respuesta el dia de ayer estuve muy ocupado y no pude revisar pero ya estoy en esas, estudiare el archivo que enviaste revisare el codigo a ver si entiendo como lo hiciste y continuo con el resto.

 

gracias y ya te estare contando como me fue.

publicado
Hace 18 horas, Macro Antonio dijo:

 

Pero en el evento Activate, si.

Ok no lo sabía, estoy un poco perdido con los eventos. Probaré para captarlo bien.

Gracias  MarcroAntonio.

publicado

El evento Activate se ejecuta inmediatamente después del procedimiento Initialize con el formulario ya cargado.

Una forma de ver como funciona todo este tema, es ejecutando el formulario/macro paso a paso (F8), y/o poniendo puntos de interrupción (F9) en la línea deseada y a continuación ejecutar (F5).

publicado

hola muchachos gracias por participar en el tema 

aaquino para entender o simplificar mas bn la forma de hacerlo en el ejemplo que enviaste, es jugar con los tipos de niveles y los mayor o menor que cierto ?

pero tengo una duda 

"If Hoja1.Range("B1") < Me.Tag Then"

En esta linea para el ejemplo tu pones B1 por que es donde esta el grado del nivel pero si son varias celdas como debo seleccionar el rango ??  Normalmente Range(B1:B10 ") por ejemplo o habria que utilizar otro metodo ??

publicado

Apañado para tu ejemplo, como decia MAcroAntonio e Aaquino  pero no me gusta como queda. En el fondo con evento activate no cancelas la apertura del formulario lo que sucede es que ya pasas a tener el control del formulario y entonces lo puedes cerrar. Y el usuario aunque se le cierra, lo puede ver y a mi particularmente no me gusta.

Queda mas apañado con el ejemplo que te he puesto arriba.

Saludos a todos

 

CONTABLE_IK_1.xlsb

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      188
    • Comentarios
      98
    • Revisiones
      29

    Más información sobre "Cambios en el Control Horario"
    Última descarga
    Por pegones1

    4    1

  • Crear macros Excel

  • Mensajes

    • Buenos días  @LeandroA espero estes bien Tengo un caso idéntico al planteado en la siguiente pregunta: Sin embargo, a diferencia de quien planteo originalmente la pregunta al correr el código no obtengo ningún resultado podrían ayudarme a resolver este inconveniente y que al hacer click en el Botón Guardar (CommandButton3) del Formulario RCS (frmrcs) el archivo pdf quede configurado con orientación vertical, márgenes superior, inferior, derecho e izquierdo = 1 y en página tamaño carta. Si acaso influye uso Microsoft Excel LTSC MSO (versión 2209 Compilación16.0.1.15629.20200) de 64 bits Mucho le sabre agradecer la ayuda que me pueda dar  RCS PRUEBA - copia.xlsm
    • @JSDJSDCon gusto mi estimado Para la opción 1: Sub Surtirhastadondealcanse() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 4 Dim filaFin As Integer: filaFin = 7 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Else solicitudes(i) = 0 End If surtido(i) = "POR FALTA STOCK" Next i ' Surtir de acuerdo al inventario disponible For i = 1 To numClientes If solicitudes(i) > 0 Then If inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) ElseIf inventario > 0 Then surtido(i) = inventario totalSurtido = totalSurtido + inventario inventario = 0 Else surtido(i) = "POR FALTA STOCK" End If End If Next i ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = "POR FALTA STOCK" Then .Value = surtido(i) .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Para la opción 2:   Sub surtirenpartesiguales() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(1) Dim filaInicio As Integer: filaInicio = 13 Dim filaFin As Integer: filaFin = 16 Dim colInventario As Integer: colInventario = 2 Dim colSolicitudesInicio As Integer: colSolicitudesInicio = 4 ' Columna C Dim colResultadoInicio As Integer: colResultadoInicio = 9 ' Columna I Dim colTotalSurtido As Integer: colTotalSurtido = 12 ' Columna L Dim colFinalInventario As Integer: colFinalInventario = 13 ' Columna M Dim numClientes As Integer: numClientes = 3 Dim fila As Integer, i As Integer For fila = filaInicio To filaFin Dim inventario As Double inventario = Val(ws.Cells(fila, colInventario).Value) Dim solicitudes(1 To 3) As Double Dim surtido(1 To 3) As Variant Dim totalSurtido As Double: totalSurtido = 0 Dim totalPedido As Double: totalPedido = 0 ' Leer solicitudes For i = 1 To numClientes If IsNumeric(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) Then solicitudes(i) = CDbl(ws.Cells(fila, colSolicitudesInicio + i - 1).Value) totalPedido = totalPedido + solicitudes(i) Else solicitudes(i) = 0 End If surtido(i) = 0 Next i ' Si hay suficiente inventario, surtir lo que el cliente pide If inventario >= totalPedido Then For i = 1 To numClientes If solicitudes(i) > 0 And inventario >= solicitudes(i) Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) End If Next i Else ' Reparto base igualitario Dim baseSurtido As Long baseSurtido = Int(inventario / numClientes) For i = 1 To numClientes If solicitudes(i) > 0 Then If solicitudes(i) <= baseSurtido Then surtido(i) = solicitudes(i) inventario = inventario - solicitudes(i) totalSurtido = totalSurtido + solicitudes(i) Else surtido(i) = baseSurtido inventario = inventario - baseSurtido totalSurtido = totalSurtido + baseSurtido End If End If Next i ' Repartir sobrante restante uno por uno, respetando lo pedido Do While inventario > 0 For i = 1 To numClientes If surtido(i) < solicitudes(i) Then surtido(i) = surtido(i) + 1 totalSurtido = totalSurtido + 1 inventario = inventario - 1 If inventario = 0 Then Exit For End If Next i Loop End If ' Escribir resultados en las columnas correspondientes para cada cliente For i = 1 To numClientes With ws.Cells(fila, colResultadoInicio + i - 1) If surtido(i) = 0 Then .Value = "POR FALTA STOCK" .Font.Color = vbRed Else .Value = surtido(i) .Font.Color = vbBlack End If End With Next i ' Escribir total surtido y existencia final ws.Cells(fila, colTotalSurtido).Value = totalSurtido ws.Cells(fila, colFinalInventario).Value = inventario Next fila MsgBox "Resultado surtido cargado con éxito...", vbInformation End Sub Saludos, Diego
    • Buenos dias.  Estoy trabajando en una hoja para poder llevar un control de un pequeño almacén.  Tengo un pedido con varias líneas y "lotes" y necesito sacar las ubicaciones que coincidan con la referencia y lote que pone en el pedido. El problema viene cuando tengo la misma referencia y mismo lote en ubicaciones diferentes y necesito sacar la información en columnas diferentes. No se si  me he explicado bien, pero creo que con el ejemplo adjunto se entiende mejor. Agradecería mucho si me pudieran ayudar  Libro1.xlsx
    • Exelente solución mil gracias 
    • Podrías compartir tu solucion
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.