lunes, 5 de marzo de 2018

Cinta o Ribbon (parte 2)

Siguiendo con el tema de 'cómo crear una cinta de opciones o Ribbon personal' vamos a tomar nota de otras instrucciones que necesitamos agregar en el Editor CustomUI y en el Editor VBA de Excel.

VIDEO 2

1- Para agregar aclaraciones a los botones, además del label podemos utilizar uno o los 2 atributos siguientes: screentip y supertip. El resultado se verá como en la imagen.

<button id="Button12" label="Listas del Sistema"  screentip="Actualiza listas del Sistema" supertip="Para modificar y actualizar listas de: unidades y otras listas." imageMso="AccessRelinkLists" size="large" onAction="Boton12"












2- Una lista desplegable sería como un subgrupo. Se pueden declarar los mismos atributos que para los botones. Lo cerramos del mismo modo que hacemos con el grupo. En ese caso el código tendrá la siguiente estructura:

<group id="Group4" label="Gestion de Usuarios">
<menu id="Menu3" label="Usuarios" size="large" image="usuarios" >
                <button id="Button9" label="Registrar Usuario"  onAction="Boton9" />
                <button id="Button10" label="Modificar Usuario"  onAction="Boton10" />
                <button id="Button11" label="Eliminar Usuario"  onAction="Boton11" />
</menu>
</group>











3- Para este tipo de modelo (donde luego haremos mención a cada elemento de la cinta para habilitarlos o no),  en el Editor de Excel escribiremos la siguiente macro donde además declaramos la variables como públicas ya que serán utilizadas en varios subrutinas:

Option Base 1
Public Cinta As IRibbonUI
Public RetVal(16) As Boolean      'cantidad de botones

Sub CargarCinta(CintaDeExcel As IRibbonUI)
    Set Cinta = CintaDeExcel
    frm_Login.Show
End Sub

 Y en el Editor CustomUI desde la primer instrucción indicaremos que al abrir el libro se ejecute esa subrutina:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="Ribbon.CargarCinta">

4- Los botones se numerarán siguiendo el orden de aparición para poder, mediante un bucle, activarlos o no según categoría de usuario. 
En el grupo Gestión de Usuarios agregamos un botón y un desplegable con 3 opciones quedando así la numeración:

<group id="Group4" label="Gestion de Usuarios">
<button id="Button8" label="Cerrar sesion" imageMso="StartTimer" size="large" onAction="Boton8" />
<menu id="Menu3" label="Usuarios" size="large" image="usuarios" >
                <button id="Button9" label="Registrar Usuario"  onAction="Boton9" />
                <button id="Button10" label="Modificar Usuario"  onAction="Boton10" />
                <button id="Button11" label="Eliminar Usuario"  onAction="Boton11" />
</menu>
</group>

NOTA: si relacionamos el número de botón con el nombre de la macro nos ahorraremos dificultades a la hora de realizar algún cambio (como agregar o quitar botones).

5- Las opciones que pueden ser habilitadas o no contarán además con el siguiente atributo: getEnabled (inhabilitar) o getVisible (ocultar)

<button id="Button9" label="Registrar Usuario"  onAction="Boton9getEnabled = "RetornoDelBoton9" />

Donde le estamos indicando que estará habilitado o no según el valor de la variable  RetornodelBoton.

6- En Excel guardaremos en 2 celdas de una hoja los valores FALSO y VERDADERO (en libro de ejemplo se utilizaron L1:L2 de hoja Login)

7- En el editor de Excel tendremos los siguientes códigos:
  • En el userform LOGIN declaramos la matriz con la cantidad de botones que tendrá nuestra cinta en total:

Option Base 1
Private Sub btn_Registrar_Click()
Dim rango As Range
Dim vBoton(16) As Boolean    'cant de botones en la cinta
Application.ScreenUpdating = False

  • En la macro del botón INGRESAR se evaluará la categoría del usuario que se está logeando. Por ejemplo, con el siguiente código le habilitamos los botones del 6 al 13 y deshabilitamos los botones del 14 al 16 para el usuario de categoría 'Admin', omitiendo el botón 8 que no sufrirá cambios.
ElseIf Status = "Admin" Then
            For x =6 To 13
                'omitimos el botón 8 que no cambia para ningún usuario
                if x <> 8 Then 
                      vBoton(x) = Sheets("Login").[L2]     ‘aquí se guarda el texto VERDADERO
                      RetVal(x) = vBoton(x)
                      Cinta.InvalidateControl ("Button" & x)
                End If
            Next x
            For x = 14 To 16
                vBoton(x) = Sheets("Login").[L1]     ‘aquí se guarda el texto FALSO
                RetVal(x) = vBoton(x)
                Cinta.InvalidateControl ("Button" & x)
            Next x
  • En el módulo donde colocamos las macros de llamada a las opciones de la cinta, también agregaremos las de cada botón de Retorno (ajustar el número)
Sub RetornoDelBoton9(control As IRibbonControl, ByRef ValorDevuelto)
    ValorDevuelto = RetVal(9)
End Sub

8- Podemos hacer una combinación de atributos o modo en que se muestren los botones, ocultando algunos e inhabilitando otros.
Por ejemplo en la segunda imagen, para un usuario ocultamos los 2 últimos controles del grupo de Guardado con getVisible (número 6 y 7 de control). El 8 queda sin cambios y el resto solo se inhabilitó (getEnabled).

Así se verá para un usuario con todos los permisos:
Y así se verá para un usuario con restricciones:

VIDEO 2

Descargar archivo Excel con el ejemplo desde aquí.



No hay comentarios.:

Publicar un comentario