lunes, 8 de agosto de 2022

61 - ComboBox en una Ribbon o Cinta de Excel

 En los videos N° 4 y 5 hablamos del uso de botones y menú desplegable dentro de una cinta o Ribbon.

Y en el video N° 52 le incorporamos un control del tipo TextBox.

En estos videos anteriores, hablamos sobre los diferentes argumentos: Label, Image, Screentip y otros como 'OnAction' para llamar a las macros de los botones y 'OnChange' para llamar a la macro en caso de un control TextBox.

Hoy vamos a agregar otro control a la cinta. Se trata de un ComboBox. Nos servirá para mostrar una cantidad considerable de elementos, en lugar de llenar la cinta de botones. 

Por ej, lista de Proveedores, Clientes, Usuarios, hojas de un libro para llegar hasta ellas sin necesidad de tener un botón de avance y otro para el regreso al menú principal.

Aquí, además de los argumentos propios a todos los botones de la cinta, veremos otros 3 argumentos que se necesitan programar:

- getItemCount:  para obtener el número total de elementos a mostrar en el control desplegable.

- getItemID:  el número del elemento seleccionado.

- getItemText:  el texto del elemento seleccionado.

En el libro desarrollado según la siguiente imagen, donde necesitamos ir a la hoja seleccionada,  no nos hace falta el 2do argumento: getItemID. Queda explicado para otros casos, como por ejemplo, evaluar qué ubicación ocupa el elemento seleccionado y según eso, seguir un procedimiento.


El código completo que colocamos en el editor OfficeRibbonx para un control del tipo ComboBox, se encuentra en el libro a descargar (ver enlace al pie). Allí también se encuentran las siguientes macros:

- Las macros al inicio del módulo donde guardaremos las subrutinas para cada botón de la cinta:

Option Explicit

Public Cinta As IRibbonUI


Sub CargarCinta(CintaDeExcel As IRibbonUI)

    Set Cinta = CintaDeExcel

End Sub


- Las macros del control ComboBox, según sus 3 argumentos declarados en el Editor de la Ribbon:


Sub irOtrosMeses(control As IRibbonControl, TextoSeleccionado As String)

    On Error GoTo sinHoja

    Sheets(TextoSeleccionado).Select

    [B7].Select

    Exit Sub

sinHoja:

    MsgBox "No se encuentra la hoja seleccionada.", , "Atención"

End Sub


'cuenta la cantidad de elementos que tendrá el control.

Sub ObtenerNumerodeMeses(control As IRibbonControl, ByRef NumerodeOpciones)

Dim x As Integer

x = Sheets("Listas").Range("C" & Rows.Count).End(xlUp).Row

    NumerodeOpciones = Application.WorksheetFunction.CountA(Sheets("LISTAS").Range("C1:C" & x))

End Sub


'guarda el nro de elemento que se ha seleccionado

Sub ObtenerIdMes(control As IRibbonControl, NumeroOpcion As Integer, ByRef nroElemento)

    nroElemento = Sheets("LISTAS").Cells(NumeroOpcion + 1, 3)

End Sub


'guarda el texto del elemento seleccionado

Sub ObtenerTextoMes(control As IRibbonControl, NumeroOpcion As Integer, ByRef TextoMes)

    TextoMes = Sheets("LISTAS").Cells(NumeroOpcion + 1, 3)

End Sub



Descargar libro de ejemplo desde aquí.

Ver video N° 61 desde aquí.