Sei sulla pagina 1di 43

Captulo 5. Mens y barras de herramientas.

En esta entrega vamos a tratar sobre la creacin de mens y barras de herramientas personalizadas para nuestras hojas. En Visual Basic for Applications, las barras de men y las barras de herramientas estn representadas por el mismo objeto (CommandBar), y su funcionamiento es exactamente igual.
Antes de nada, vamos a intentar aclarar la nomenclatura que se utiliza en VBA para hacer referencia a cada una de las partes de un menu.
El nombre del menu en s mismo es CommandBar. Un CommandBar (barra de men) representa a todo el men, como por ejemplo el que aparece cuando ests en una hoja de clculo. Si cambias a una hoja de grfico vers que el men cambia: se ha cambiado de barra de men (CommandBar).
Aula Macedonia
Curso de Programacin en VBA para Excel
Todos los ejemplos de este captulo estn includos en este fichero:
Cada una de las opciones de la barra de men se llama CommandBarPopUp (men desplegable segn la traduccin de Microsoft). Por ejemplo, en el men de una hoja de clculo la opcin "Archivo" es un men desplegable o CommandBarPopUp.
Dentro del men desplegable, cada una de las opciones se llama ControlButton (opcin de men). Por ejemplo, "nuevo" y "Guardar" son opciones del men desplegable "archivo" de la barra de men de "Hoja de clculo" de Excel.
Para tener acceso a las barras de comandos (que pueden ser mens o barras de herramientas) utilizaremos la propiedad CommandBars, que devuelve el conjunto de barras de comandos de la aplicacin. Cada una de las barras de comando ser por tanto un objeto CommandBar.
Por ejemplo, para ver los nombres de todas las barras de comando que existen escribiremos la siguiente rutina:
Sub ListaBarrasComando()
Dim h as Object
Dim dst as Range
Set dst = Sheets("Hoja1").Range("A1")
For Each h in CommandBars
dst.Value = h.Name
Set dst = dst.Offset(1, 0)
Next h
End Sub
De esta forma obtendremos el nombre de todas las barras de comando. Recuerda que puede haber barras de comando que existan pero no estn activas, que no aparezcan en la pantalla.
Como habrs podido deducir, la propiedad Name de un objeto CommandBar nos devuelve el nombre de la barra de comando.
1. Crear una opcin de men.
Lo primero que vamos a hacer es crear una opcion dentro de un men desplegable. Por ejemplo, vamos a crear una opcin llamada "Macedonia " dentro del men "Edicin".
Antes que nada, declaramos las variables que vamos a utilizar:
Dim cBar As Object
Dim cBarPopUp As Object
Dim cButton As Object
La primera variable (cBar ) la utilizaremos para almacenar el men de hoja de clculo entero, la segunda (cBarPopUp ) para obtener el men de "Edicin" dentro de cBar , y la tercera para crear nuestra opcin (Macedonia) dentro del men de Edicin.
Vamos a obtener el men de hoja de clculo. Si te fijas en el resultado de la rutina ListaBarrasComando que hemos creado antes, vers que una de las barras de comando se llama "Worksheet Menu Bar ". Esta es la barra de comandos que est presente cuando ests en una hoja de clculo. Hay otras barras, como por ejemplo "Chart Menu Bar", que es la que aparece cuando ests en una hoja de grficos.
Para utilizar la barra de comandos "Worksheet Menu Bar" haremos lo siguiente:
Set cBar = CommandBars("Worksheet Menu Bar")
Con esto hemos conseguido que nuestra variable, cBar, contenga la barra de comandos que nos interesa. Ahora queremos seleccionar una parte de ese barra de comandos: queremos el men de Edicin. Para ello utilizamos el siguiente cdigo:
Set cBarPopUp = cBar.Controls("Edicin")
Hemos utilizado la propiedad "Controls" del objeto CommandBar. Esta propiedad nos permite acceder a todos los submens de una barra de comandos. El objeto devuelto es del tipo "CommandBarPopup". Reconozco que la terminologa es un poco confusa, pero as lo ha hecho Microsoft.
Ahora ya tenemos el men de "Edicin" en nuestra variable. Y lo que queremos hacer es aadir una opcin dentro de ese men. Para hacerlo utilizaremos deberemos acceder a la propiedad "Controls" de nuestro men de Edicin. Fjate que antes hemos accedido a la propiedad Controls del objeto cBar, y ahora vamos a acceder a la propiedad Controls del objeto cBarPopUp . Pues bien, una vez que accedemos a la propiedad "Controls" del men Edicin (cBarPopUp ), utilizamos el mtodo Add para aadir una nueva opcin del men:
Set cButton = cBarPopUp.Controls.Add(msoControlButton)
Almacenamos en nuestra variable cButton el resultado, porque luego queremos hacerle unos cambios.
El tipo de control que queremos aadir puede variar ( msoControlButton, msoControlEdit, msoControlDropdown, msoControlComboBox o msoControlPopup ), pero en nuestro caso queremos una opcin de men, y utilizamos msoControlButton.
Nos queda hacer que nuestra opcin de men (o ControlButton), tenga el texto que nosotros queremos y haga lo que nosotros queremos. Para ello utilizaremos las propiedades del ControlButton:
Caption: es el texto que queremos que aparezca en la opcin de men. En nuestro caso, "&Macedonia". El carcter "&" se utiliza para indicar que la letra que le sigue (la "M" en este caso) queremos que apareza subrayada y funcione como tecla rpida una vez que est abierto el men.
OnAction: es el nombre de la rutina que queremos que se ejecute cuando el usuario seleccione esa opcin. En este caso vamos a darle el valor "MiMacro", que ser una pequea rutina que simplemente avisar de que hemos seleccionado esa opcin.
ShortcutText: el texto que aparece en la opcin del men, a la derecha. Normalmente se suele poner la tecla rpida para esa opcin de men. Cuidado, porque esta opcin slo sirve para escribir el texto, pero no hace que la tecla rpida funcione, eso tendrs que hacerlo t por otro lado.
FaceID: es el nmero de la imagen que queremos que se asigne a nuestra opcin de men. La imagen aparece en la parte izquierda de la opcin. Excel tiene un montn de imgenes para nuestras opciones, y se pueden seleccionar cambiando el ID. Para ver todas las imgenes disponibles y saber qu ID corresponde a cada imagen, lo mejor es hacer una pequea rutina que muestre todas las imgenes. (eso te queda como ejercicio; si tienes alguna duda escrbeme).
BeginGroup: true o false, indica si queremos que antes de nuestra opcin se ponga un "separador", una lnea que separe un poco nuestra opcin de la anterior.
Como siempre, hay muchas ms propiedades, pero creo que hemos visto las ms importantes. Vamos a ver nuestra rutina completa:
Sub CrearOpcionMenu()
Dim cBar As Object
Dim cBarPopUp As Object
Dim cButton As Object

BorrarOpcionMenu
Set cBar = CommandBars("Worksheet Menu Bar")
Set cBarPopUp = cBar.Controls("Edicin")
Set cButton = cBarPopUp.Controls.Add(msoControlButton)
With cButton
.Caption = "&Macedonia"
.OnAction = "MiMacro"
.FaceId = 7
.ShortcutText = "Ctrl+Shift+M"
.BeginGroup = True
End With
Call MsgBox("Se ha creado la opcin 'Macedonia' en el men 'Edicin'", vbOKOnly, "Macedonia")
End Sub
Para verla en accin abre el fichero de ejemplo, y utiliza el botn "Crear opcin de men".
Si te fijas en la rutina CrearOpcionMenu , hemos incluido una llamada a la rutina BorrarOpcionMenu . Esta ltima se encarga de borrar la opcin "Macedonia" del men Edicin en caso de que ya exista, y llamndola evitamos que aparezcan dos opciones "Macedonia". La rutina BorrarOpcionMenu es la siguiente:
Sub BorrarOpcionMenu()
Dim cBar As Object
Dim cBarPopUp As Object
Dim cc As Object

Set cBar = CommandBars("Worksheet Menu Bar")
Set cBarPopUp = cBar.Controls("Edicin")
For Each cc In cBarPopUp.Controls
If cc.Caption = "&Macedonia" Then cc.Delete
Next cc
End Sub
Al igual que en la rutina CrearOpcionMenu, primero obtenemos la barra de comandos "Worksheet Menu Bar", despues la barra "Edicin", y luego, utilizando la instruccin "For Each", pasamos por todos las opciones de men, y borramos aquellas cuyo "Caption" sea "&Macedonia" (incluyendo el &). Para borrar la opcin de men utilizamos el mtodo Delete.
2. Crear un men desplegable.
Ahora vamos a crear un men desplegable (como el men Archivo, o Edicin, de la hoja de clculo de Excel). Como siempre, primero declaramos las variables que vamos a utilizar.
Dim cBar As Object
Dim cBarPopUp As Object
Dim cButton As Object
Luego vamos a obtener la barra de comandos de la hoja de clculo:
Set cBar = CommandBars("Worksheet Menu Bar")
Para aadir un men desplegable a dicha barra de comandos vamos a utilizar el mtodo "Add" de la coleccin "Controls" de la barra de comandos:
Set cBarPopUp = cBar.Controls.Add(Type:=msoControlPopup, Before:=10)
El tipo de control que queremos aadir es un "msoControlPopup", para indicar que queremos un men desplegable.
cBarPopUp.Caption = "&Macedonia"
Ahora tenemos en cBarPopUp un men desplegable, igual que en el punto anterior tenamos el men desplegable "Edicin". Ahora tenemos que aadir opciones en dicho men desplagable, igual que hemos hecho antes:
Set cButton = cBarPopUp.Controls.Add(msoControlButton)
With cButton
.Caption = "&Macedonia 1"
.OnAction = "MiMacro"
End With
Tambin podemos aadir un submen dentro de alguna opcin de nuestro men, de una forma muy parecida. La rutina completa para crear un men desplegable es la siguiente:
Sub CrearMenuDesplegable()
Dim cBar As Object
Dim cBarPopUp As Object
Dim cButton As Object
Dim i, j As Integer

BorrarMenuDesplegable
Set cBar = CommandBars("Worksheet Menu Bar")
Set cBarPopUp = cBar.Controls.Add(Type:=msoControlPopup, _
Before:=10)
cBarPopUp.Caption = "&Macedonia"

For i = 1 To 10
If i <> 5 Then
Set cButton = cBarPopUp.Controls.Add(msoControlButton)
With cButton
.Caption = "&Macedonia " & i
.OnAction = "MiMacro"
If i Mod 3 = 0 Then .BeginGroup = True
End With
Else
Set cButton = cBarPopUp.Controls.Add(msoControlPopup)
cButton.Caption = "&Macedonia " & i
For j = 1 To 5
With cButton.Controls.Add(msoControlButton)
.Caption = "Submen Macedonia " & j
.OnAction = "MiMacro"
If j Mod 3 = 0 Then .BeginGroup = True
End With
Next j
End If
Next i
Call MsgBox("Se ha aadido la opcin 'Macedonia' en el men principal", _
vbOKOnly, "Macedonia")
End Sub
Para ver esta rutina en accin utiliza el botn "Crear men desplegable" del fichero de ejemplo.
3. Crear una barra de men.
Ahora vamos a crear una barra de men completa, como la barra de men "Worksheet Menu Bar". Lo primero, como siempre, es declarar las variables:
Dim cBar As Object
Dim cBarPopUp As Object
Dim cButton As Object
En lugar de obtener la barra de men "Worksheet Menu Bar" y luego trabajar con ella, ahora lo que vamos a hacer es crear nosotros mismos una barra de men, utilizando el mtodo "Add" de la coleccin "CommandBars".
Set cBar = CommandBars.Add("Barra Macedonia", msoBarTop, True)
El primer argumento es el nombre de la barra de comandos que vamos a crear. El segundo argumento es la posicin de la nueva barra de comandos, y puede ser uno de los siguientes valores:
msoBarLeft, msoBarRight, msoBarTop, msoBarBottom: izquierda, derecha, arriba o abajo.
msoBarFloating: queremos que la nueva barra de men sea flotante.
msoBarPopUp: la nueva barra de mens ser contextual, como las que salen cuando pulsamos el botn derecho.
El tercer argumento (verdadero o falso) indica si queremos que la nueva barra de men reemplace a la barra de mens activa o no.
Una vez que tenemos nuestra barra de men utilizamos el cdigo que hemos aprendido antes para crear los mens desplegables y sus opciones. La siguiente rutina crea una barra de men y varios mens desplegables y opciones:
Private Const NOMBREMENU = "Men Macedonia"
Sub CrearBarraMenu()
Dim cBar As Object
Dim cBarPopUp As Object
Dim cButton As Object
Dim i, j As Integer

BorrarBarraMenu
Set cBar = CommandBars.Add(NOMBREMENU, msoBarTop, True)

For j = 1 To 5
Set cBarPopUp = cBar.Controls.Add(Type:=msoControlPopup)
cBarPopUp.Caption = "&Macedonia " & j
For i = 1 To j + 2
Set cButton = cBarPopUp.Controls.Add(msoControlButton)
With cButton
.Caption = "&Macedonia " & i
.OnAction = "MiMacro"
If i Mod 3 = 0 Then .BeginGroup = True
End With
Next i
Next j
Call MsgBox("Se ha creado la barra de men 'Macedonia'.", vbOKOnly, "Macedonia")
End Sub
Hemos utilizado la variable "NOMBREMENU" para dar el nombre a la barra de men. Cuando se usa una cadena en ms de un sitio del cdigo es aconsejable sustituir la cadena por una variable, para evitar errores al escribir la cadena en varios sitios.
Con la rutina anterior hemos creado la barra de men, pero todava no la podemos ver, porque hay que activarla, usando:
CommandBars(NOMBREMENU).Visible = True
Como al crear la barra hemos indicado (con el tercer argumento) que esta barra tiene que sustituir a la que esta activa, la barra activa desaparece y la nuestra aparece. Para volver a desactivar nuestra barra, utilizaremos:
CommandBars(NOMBREMENU).Visible = False
Si queremos borrar la barra de menu que hemos creado utilizaremos el metodo Delete:
CommandBars(NOMBREMENU).Delete
En el fichero excel5.xls tienes unos botones que sirven para crear, activar, desactivar y borrar una barra de men.
4. Crear una barra de herramientas:
Como hemos visto al principio, en VBA las barras de men y las barras de herramientas estn representadas por el mismo objeto (CommandBar), y su funcionamiento es prcticamente igual.
Crear una barra de herramientas es exactamente igual que crear una barra de men:
Set cBar = CommandBars.Add(NOMBREBARRA, msoBarFloating, False)
En este caso hemos creado una barra "flotante", pero podamos haber utilizado cualquiera de los otros parmetros que hemos visto antes.
Ahora vamos a crear un botn de la barra de herramientas. La nica diferencia entre crear un botn y crear un men desplegable es el tipo de control, el parmetro del mtodo Add. En este caso utilizaremos "msoControlButton":
Set cButton = cBar.Controls.Add(msoControlButton)
With cButton
.Caption = "&Macedonia " & i
.OnAction = "MiMacro"
.FaceId = Int(Rnd * 1000)
End With
El cdigo utilizado para crear, activar, desactivar y borrar una barra de herramientas es el mismo que para una barra de mens. De hecho no hay ninguna diferencia entre ellas, en Excel las dos son una barra de comandos (CommandBar). Adems, tambin podemos mezclar botones y mens dentro de una barra de comandos: slo hay que crear la barra y luego aadir controles tipo "msoControlPopup" para los mens y controles "msoControlButton" para los botones.
Bueno, aqu termina la quinta entrega del curso de VBA para Excel. Si tienes cualquier duda o comentario no dudes en escribirme.
Recuerda que los ejemplos de este captulo estn includos en este fichero:
En esta entrega vamos a tratar sobre la creacin de mens y barras de herramientas personalizadas para nuestras hojas. En Visual Basic for Applications, las barras de men y las barras de herramientas estn representadas por el mismo objeto (CommandBar), y su funcionamiento es exactamente igual.
Excel5.xls
(90kbs)
Antes de nada, vamos a intentar aclarar la nomenclatura que se utiliza en VBA para hacer referencia a cada una de las partes de un menu.
El nombre del menu en s mismo es CommandBar. Un CommandBar (barra de men) representa a todo el men, como por ejemplo el que aparece cuando ests en una hoja de clculo. Si cambias a una hoja de grfico vers que el men cambia: se ha cambiado de barra de men (CommandBar).
Aula Macedonia
Curso de Programacin en VBA para Excel
Todos los ejemplos de este captulo estn includos en este fichero:
Cada una de las opciones de la barra de men se llama CommandBarPopUp (men desplegable segn la traduccin de Microsoft). Por ejemplo, en el men de una hoja de clculo la opcin "Archivo" es un men desplegable o CommandBarPopUp.
Dentro del men desplegable, cada una de las opciones se llama ControlButton (opcin de men). Por ejemplo, "nuevo" y "Guardar" son opciones del men desplegable "archivo" de la barra de men de "Hoja de clculo" de Excel.
Para tener acceso a las barras de comandos (que pueden ser mens o barras de herramientas) utilizaremos la propiedad CommandBars, que devuelve el conjunto de barras de comandos de la aplicacin. Cada una de las barras de comando ser por tanto un objeto CommandBar.
Por ejemplo, para ver los nombres de todas las barras de comando que existen escribiremos la siguiente rutina:
De esta forma obtendremos el nombre de todas las barras de comando. Recuerda que puede haber barras de comando que existan pero no estn activas, que no aparezcan en la pantalla.
Como habrs podido deducir, la propiedad Name de un objeto CommandBar nos devuelve el nombre de la barra de comando.
Lo primero que vamos a hacer es crear una opcion dentro de un men desplegable. Por ejemplo, vamos a crear una opcin llamada "Macedonia " dentro del men "Edicin".
La primera variable (cBar ) la utilizaremos para almacenar el men de hoja de clculo entero, la segunda (cBarPopUp ) para obtener el men de "Edicin" dentro de cBar , y la tercera para crear nuestra opcin (Macedonia) dentro del men de Edicin.
Vamos a obtener el men de hoja de clculo. Si te fijas en el resultado de la rutina ListaBarrasComando que hemos creado antes, vers que una de las barras de comando se llama "Worksheet Menu Bar ". Esta es la barra de comandos que est presente cuando ests en una hoja de clculo. Hay otras barras, como por ejemplo "Chart Menu Bar", que es la que aparece cuando ests en una hoja de grficos.
Con esto hemos conseguido que nuestra variable, cBar, contenga la barra de comandos que nos interesa. Ahora queremos seleccionar una parte de ese barra de comandos: queremos el men de Edicin. Para ello utilizamos el siguiente cdigo:
Hemos utilizado la propiedad "Controls" del objeto CommandBar. Esta propiedad nos permite acceder a todos los submens de una barra de comandos. El objeto devuelto es del tipo "CommandBarPopup". Reconozco que la terminologa es un poco confusa, pero as lo ha hecho Microsoft.
Ahora ya tenemos el men de "Edicin" en nuestra variable. Y lo que queremos hacer es aadir una opcin dentro de ese men. Para hacerlo utilizaremos deberemos acceder a la propiedad "Controls" de nuestro men de Edicin. Fjate que antes hemos accedido a la propiedad Controls del objeto cBar, y ahora vamos a acceder a la propiedad Controls del objeto cBarPopUp . Pues bien, una vez que accedemos a la propiedad "Controls" del men Edicin (cBarPopUp ), utilizamos el mtodo Add para aadir una nueva opcin del men:
Almacenamos en nuestra variable cButton el resultado, porque luego queremos hacerle unos cambios.
El tipo de control que queremos aadir puede variar ( msoControlButton, msoControlEdit, msoControlDropdown, msoControlComboBox o msoControlPopup ), pero en nuestro caso queremos una opcin de men, y utilizamos msoControlButton.
Nos queda hacer que nuestra opcin de men (o ControlButton), tenga el texto que nosotros queremos y haga lo que nosotros queremos. Para ello utilizaremos las propiedades del ControlButton:
Caption: es el texto que queremos que aparezca en la opcin de men. En nuestro caso, "&Macedonia". El carcter "&" se utiliza para indicar que la letra que le sigue (la "M" en este caso) queremos que apareza subrayada y funcione como tecla rpida una vez que est abierto el men.
OnAction: es el nombre de la rutina que queremos que se ejecute cuando el usuario seleccione esa opcin. En este caso vamos a darle el valor "MiMacro", que ser una pequea rutina que simplemente avisar de que hemos seleccionado esa opcin.
ShortcutText: el texto que aparece en la opcin del men, a la derecha. Normalmente se suele poner la tecla rpida para esa opcin de men. Cuidado, porque esta opcin slo sirve para escribir el texto, pero no hace que la tecla rpida funcione, eso tendrs que hacerlo t por otro lado.
FaceID: es el nmero de la imagen que queremos que se asigne a nuestra opcin de men. La imagen aparece en la parte izquierda de la opcin. Excel tiene un montn de imgenes para nuestras opciones, y se pueden seleccionar cambiando el ID. Para ver todas las imgenes disponibles y saber qu ID corresponde a cada imagen, lo mejor es hacer una pequea rutina que muestre todas las imgenes. (eso te queda como ejercicio; si tienes alguna duda escrbeme).
BeginGroup: true o false, indica si queremos que antes de nuestra opcin se ponga un "separador", una lnea que separe un poco nuestra opcin de la anterior.
Como siempre, hay muchas ms propiedades, pero creo que hemos visto las ms importantes. Vamos a ver nuestra rutina completa:
Si te fijas en la rutina CrearOpcionMenu , hemos incluido una llamada a la rutina BorrarOpcionMenu . Esta ltima se encarga de borrar la opcin "Macedonia" del men Edicin en caso de que ya exista, y llamndola evitamos que aparezcan dos opciones "Macedonia". La rutina BorrarOpcionMenu es la siguiente:
Al igual que en la rutina CrearOpcionMenu, primero obtenemos la barra de comandos "Worksheet Menu Bar", despues la barra "Edicin", y luego, utilizando la instruccin "For Each", pasamos por todos las opciones de men, y borramos aquellas cuyo "Caption" sea "&Macedonia" (incluyendo el &). Para borrar la opcin de men utilizamos el mtodo Delete.
Ahora vamos a crear un men desplegable (como el men Archivo, o Edicin, de la hoja de clculo de Excel). Como siempre, primero declaramos las variables que vamos a utilizar.
Para aadir un men desplegable a dicha barra de comandos vamos a utilizar el mtodo "Add" de la coleccin "Controls" de la barra de comandos:
El tipo de control que queremos aadir es un "msoControlPopup", para indicar que queremos un men desplegable.
Ahora tenemos en cBarPopUp un men desplegable, igual que en el punto anterior tenamos el men desplegable "Edicin". Ahora tenemos que aadir opciones en dicho men desplagable, igual que hemos hecho antes:
Tambin podemos aadir un submen dentro de alguna opcin de nuestro men, de una forma muy parecida. La rutina completa para crear un men desplegable es la siguiente:
Ahora vamos a crear una barra de men completa, como la barra de men "Worksheet Menu Bar". Lo primero, como siempre, es declarar las variables:
En lugar de obtener la barra de men "Worksheet Menu Bar" y luego trabajar con ella, ahora lo que vamos a hacer es crear nosotros mismos una barra de men, utilizando el mtodo "Add" de la coleccin "CommandBars".
El primer argumento es el nombre de la barra de comandos que vamos a crear. El segundo argumento es la posicin de la nueva barra de comandos, y puede ser uno de los siguientes valores:
msoBarPopUp: la nueva barra de mens ser contextual, como las que salen cuando pulsamos el botn derecho.
El tercer argumento (verdadero o falso) indica si queremos que la nueva barra de men reemplace a la barra de mens activa o no.
Una vez que tenemos nuestra barra de men utilizamos el cdigo que hemos aprendido antes para crear los mens desplegables y sus opciones. La siguiente rutina crea una barra de men y varios mens desplegables y opciones:
Hemos utilizado la variable "NOMBREMENU" para dar el nombre a la barra de men. Cuando se usa una cadena en ms de un sitio del cdigo es aconsejable sustituir la cadena por una variable, para evitar errores al escribir la cadena en varios sitios.
Con la rutina anterior hemos creado la barra de men, pero todava no la podemos ver, porque hay que activarla, usando:
Como al crear la barra hemos indicado (con el tercer argumento) que esta barra tiene que sustituir a la que esta activa, la barra activa desaparece y la nuestra aparece. Para volver a desactivar nuestra barra, utilizaremos:
En el fichero excel5.xls tienes unos botones que sirven para crear, activar, desactivar y borrar una barra de men.
Como hemos visto al principio, en VBA las barras de men y las barras de herramientas estn representadas por el mismo objeto (CommandBar), y su funcionamiento es prcticamente igual.
En este caso hemos creado una barra "flotante", pero podamos haber utilizado cualquiera de los otros parmetros que hemos visto antes.
Ahora vamos a crear un botn de la barra de herramientas. La nica diferencia entre crear un botn y crear un men desplegable es el tipo de control, el parmetro del mtodo Add. En este caso utilizaremos "msoControlButton":
El cdigo utilizado para crear, activar, desactivar y borrar una barra de herramientas es el mismo que para una barra de mens. De hecho no hay ninguna diferencia entre ellas, en Excel las dos son una barra de comandos (CommandBar). Adems, tambin podemos mezclar botones y mens dentro de una barra de comandos: slo hay que crear la barra y luego aadir controles tipo "msoControlPopup" para los mens y controles "msoControlButton" para los botones.
Bueno, aqu termina la quinta entrega del curso de VBA para Excel. Si tienes cualquier duda o comentario no dudes en escribirme.
Excel5.xls
(90kbs)
Recuerda que los ejemplos de este captulo estn includos en este fichero:
En esta entrega vamos a tratar sobre la creacin de mens y barras de herramientas personalizadas para nuestras hojas. En Visual Basic for Applications, las barras de men y las barras de herramientas estn representadas por el mismo objeto (CommandBar), y su funcionamiento es exactamente igual.
El nombre del menu en s mismo es CommandBar. Un CommandBar (barra de men) representa a todo el men, como por ejemplo el que aparece cuando ests en una hoja de clculo. Si cambias a una hoja de grfico vers que el men cambia: se ha cambiado de barra de men (CommandBar).
Aula Macedonia
Curso de Programacin en VBA para Excel
Cada una de las opciones de la barra de men se llama CommandBarPopUp (men desplegable segn la traduccin de Microsoft). Por ejemplo, en el men de una hoja de clculo la opcin "Archivo" es un men desplegable o CommandBarPopUp.
Dentro del men desplegable, cada una de las opciones se llama ControlButton (opcin de men). Por ejemplo, "nuevo" y "Guardar" son opciones del men desplegable "archivo" de la barra de men de "Hoja de clculo" de Excel.
Para tener acceso a las barras de comandos (que pueden ser mens o barras de herramientas) utilizaremos la propiedad CommandBars, que devuelve el conjunto de barras de comandos de la aplicacin. Cada una de las barras de comando ser por tanto un objeto CommandBar.
La primera variable (cBar ) la utilizaremos para almacenar el men de hoja de clculo entero, la segunda (cBarPopUp ) para obtener el men de "Edicin" dentro de cBar , y la tercera para crear nuestra opcin (Macedonia) dentro del men de Edicin.
Vamos a obtener el men de hoja de clculo. Si te fijas en el resultado de la rutina ListaBarrasComando que hemos creado antes, vers que una de las barras de comando se llama "Worksheet Menu Bar ". Esta es la barra de comandos que est presente cuando ests en una hoja de clculo. Hay otras barras, como por ejemplo "Chart Menu Bar", que es la que aparece cuando ests en una hoja de grficos.
Con esto hemos conseguido que nuestra variable, cBar, contenga la barra de comandos que nos interesa. Ahora queremos seleccionar una parte de ese barra de comandos: queremos el men de Edicin. Para ello utilizamos el siguiente cdigo:
Hemos utilizado la propiedad "Controls" del objeto CommandBar. Esta propiedad nos permite acceder a todos los submens de una barra de comandos. El objeto devuelto es del tipo "CommandBarPopup". Reconozco que la terminologa es un poco confusa, pero as lo ha hecho Microsoft.
Ahora ya tenemos el men de "Edicin" en nuestra variable. Y lo que queremos hacer es aadir una opcin dentro de ese men. Para hacerlo utilizaremos deberemos acceder a la propiedad "Controls" de nuestro men de Edicin. Fjate que antes hemos accedido a la propiedad Controls del objeto cBar, y ahora vamos a acceder a la propiedad Controls del objeto cBarPopUp . Pues bien, una vez que accedemos a la propiedad "Controls" del men Edicin (cBarPopUp ), utilizamos el mtodo Add para aadir una nueva opcin del men:
El tipo de control que queremos aadir puede variar ( msoControlButton, msoControlEdit, msoControlDropdown, msoControlComboBox o msoControlPopup ), pero en nuestro caso queremos una opcin de men, y utilizamos msoControlButton.
Caption: es el texto que queremos que aparezca en la opcin de men. En nuestro caso, "&Macedonia". El carcter "&" se utiliza para indicar que la letra que le sigue (la "M" en este caso) queremos que apareza subrayada y funcione como tecla rpida una vez que est abierto el men.
OnAction: es el nombre de la rutina que queremos que se ejecute cuando el usuario seleccione esa opcin. En este caso vamos a darle el valor "MiMacro", que ser una pequea rutina que simplemente avisar de que hemos seleccionado esa opcin.
ShortcutText: el texto que aparece en la opcin del men, a la derecha. Normalmente se suele poner la tecla rpida para esa opcin de men. Cuidado, porque esta opcin slo sirve para escribir el texto, pero no hace que la tecla rpida funcione, eso tendrs que hacerlo t por otro lado.
FaceID: es el nmero de la imagen que queremos que se asigne a nuestra opcin de men. La imagen aparece en la parte izquierda de la opcin. Excel tiene un montn de imgenes para nuestras opciones, y se pueden seleccionar cambiando el ID. Para ver todas las imgenes disponibles y saber qu ID corresponde a cada imagen, lo mejor es hacer una pequea rutina que muestre todas las imgenes. (eso te queda como ejercicio; si tienes alguna duda escrbeme).
Si te fijas en la rutina CrearOpcionMenu , hemos incluido una llamada a la rutina BorrarOpcionMenu . Esta ltima se encarga de borrar la opcin "Macedonia" del men Edicin en caso de que ya exista, y llamndola evitamos que aparezcan dos opciones "Macedonia". La rutina BorrarOpcionMenu es la siguiente:
Al igual que en la rutina CrearOpcionMenu, primero obtenemos la barra de comandos "Worksheet Menu Bar", despues la barra "Edicin", y luego, utilizando la instruccin "For Each", pasamos por todos las opciones de men, y borramos aquellas cuyo "Caption" sea "&Macedonia" (incluyendo el &). Para borrar la opcin de men utilizamos el mtodo Delete.
Ahora tenemos en cBarPopUp un men desplegable, igual que en el punto anterior tenamos el men desplegable "Edicin". Ahora tenemos que aadir opciones en dicho men desplagable, igual que hemos hecho antes:
En lugar de obtener la barra de men "Worksheet Menu Bar" y luego trabajar con ella, ahora lo que vamos a hacer es crear nosotros mismos una barra de men, utilizando el mtodo "Add" de la coleccin "CommandBars".
Una vez que tenemos nuestra barra de men utilizamos el cdigo que hemos aprendido antes para crear los mens desplegables y sus opciones. La siguiente rutina crea una barra de men y varios mens desplegables y opciones:
Hemos utilizado la variable "NOMBREMENU" para dar el nombre a la barra de men. Cuando se usa una cadena en ms de un sitio del cdigo es aconsejable sustituir la cadena por una variable, para evitar errores al escribir la cadena en varios sitios.
Como al crear la barra hemos indicado (con el tercer argumento) que esta barra tiene que sustituir a la que esta activa, la barra activa desaparece y la nuestra aparece. Para volver a desactivar nuestra barra, utilizaremos:
Ahora vamos a crear un botn de la barra de herramientas. La nica diferencia entre crear un botn y crear un men desplegable es el tipo de control, el parmetro del mtodo Add. En este caso utilizaremos "msoControlButton":
El cdigo utilizado para crear, activar, desactivar y borrar una barra de herramientas es el mismo que para una barra de mens. De hecho no hay ninguna diferencia entre ellas, en Excel las dos son una barra de comandos (CommandBar). Adems, tambin podemos mezclar botones y mens dentro de una barra de comandos: slo hay que crear la barra y luego aadir controles tipo "msoControlPopup" para los mens y controles "msoControlButton" para los botones.
En esta entrega vamos a tratar sobre la creacin de mens y barras de herramientas personalizadas para nuestras hojas. En Visual Basic for Applications, las barras de men y las barras de herramientas estn representadas por el mismo objeto (CommandBar), y su funcionamiento es exactamente igual.
Vamos a obtener el men de hoja de clculo. Si te fijas en el resultado de la rutina ListaBarrasComando que hemos creado antes, vers que una de las barras de comando se llama "Worksheet Menu Bar ". Esta es la barra de comandos que est presente cuando ests en una hoja de clculo. Hay otras barras, como por ejemplo "Chart Menu Bar", que es la que aparece cuando ests en una hoja de grficos.
Ahora ya tenemos el men de "Edicin" en nuestra variable. Y lo que queremos hacer es aadir una opcin dentro de ese men. Para hacerlo utilizaremos deberemos acceder a la propiedad "Controls" de nuestro men de Edicin. Fjate que antes hemos accedido a la propiedad Controls del objeto cBar, y ahora vamos a acceder a la propiedad Controls del objeto cBarPopUp . Pues bien, una vez que accedemos a la propiedad "Controls" del men Edicin (cBarPopUp ), utilizamos el mtodo Add para aadir una nueva opcin del men:
FaceID: es el nmero de la imagen que queremos que se asigne a nuestra opcin de men. La imagen aparece en la parte izquierda de la opcin. Excel tiene un montn de imgenes para nuestras opciones, y se pueden seleccionar cambiando el ID. Para ver todas las imgenes disponibles y saber qu ID corresponde a cada imagen, lo mejor es hacer una pequea rutina que muestre todas las imgenes. (eso te queda como ejercicio; si tienes alguna duda escrbeme).
Si te fijas en la rutina CrearOpcionMenu , hemos incluido una llamada a la rutina BorrarOpcionMenu . Esta ltima se encarga de borrar la opcin "Macedonia" del men Edicin en caso de que ya exista, y llamndola evitamos que aparezcan dos opciones "Macedonia". La rutina BorrarOpcionMenu es la siguiente:
Al igual que en la rutina CrearOpcionMenu, primero obtenemos la barra de comandos "Worksheet Menu Bar", despues la barra "Edicin", y luego, utilizando la instruccin "For Each", pasamos por todos las opciones de men, y borramos aquellas cuyo "Caption" sea "&Macedonia" (incluyendo el &). Para borrar la opcin de men utilizamos el mtodo Delete.
El cdigo utilizado para crear, activar, desactivar y borrar una barra de herramientas es el mismo que para una barra de mens. De hecho no hay ninguna diferencia entre ellas, en Excel las dos son una barra de comandos (CommandBar). Adems, tambin podemos mezclar botones y mens dentro de una barra de comandos: slo hay que crear la barra y luego aadir controles tipo "msoControlPopup" para los mens y controles "msoControlButton" para los botones.
Vamos a obtener el men de hoja de clculo. Si te fijas en el resultado de la rutina ListaBarrasComando que hemos creado antes, vers que una de las barras de comando se llama "Worksheet Menu Bar ". Esta es la barra de comandos que est presente cuando ests en una hoja de clculo. Hay otras barras, como por ejemplo "Chart Menu Bar", que es la que aparece cuando ests en una hoja de grficos.
Ahora ya tenemos el men de "Edicin" en nuestra variable. Y lo que queremos hacer es aadir una opcin dentro de ese men. Para hacerlo utilizaremos deberemos acceder a la propiedad "Controls" de nuestro men de Edicin. Fjate que antes hemos accedido a la propiedad Controls del objeto cBar, y ahora vamos a acceder a la propiedad Controls del objeto cBarPopUp. Pues bien, una vez que accedemos a la propiedad "Controls" del men Edicin (cBarPopUp ), utilizamos el mtodo Add para aadir una nueva opcin del men:
FaceID: es el nmero de la imagen que queremos que se asigne a nuestra opcin de men. La imagen aparece en la parte izquierda de la opcin. Excel tiene un montn de imgenes para nuestras opciones, y se pueden seleccionar cambiando el ID. Para ver todas las imgenes disponibles y saber qu ID corresponde a cada imagen, lo mejor es hacer una pequea rutina que muestre todas las imgenes. (eso te queda como ejercicio; si tienes alguna duda escrbeme).
El cdigo utilizado para crear, activar, desactivar y borrar una barra de herramientas es el mismo que para una barra de mens. De hecho no hay ninguna diferencia entre ellas, en Excel las dos son una barra de comandos (CommandBar). Adems, tambin podemos mezclar botones y mens dentro de una barra de comandos: slo hay que crear la barra y luego aadir controles tipo "msoControlPopup" para los mens y controles "msoControlButton" para los botones.
Ahora ya tenemos el men de "Edicin " en nuestra variable. Y lo que queremos hacer es aadir una opcin dentro de ese men. Para hacerlo utilizaremos deberemos acceder a la propiedad "Controls" de nuestro men de Edicin. Fjate que antes hemos accedido a la propiedad Controls del objeto cBar, y ahora vamos a acceder a la propiedad Controls del objeto cBarPopUp . Pues bien, una vez que accedemos a la propiedad "Controls" del men Edicin (cBarPopUp ), utilizamos el mtodo Add para aadir una nueva opcin del men:

Potrebbero piacerti anche