Objeto CommandBar no encontrado

14/09/2006 - 22:14 por Juan Carlos Perez | Informe spam
Estoy tratando de hacer una macro para insertar una barra de menús
personalizada en una de mis aplicaciones. No obstante, cuando hago pruebas
con un libro en blanco, sí me funciona, pero cuando traslado la macro a un
módulo de mi aplicación, VBA no reconoce el objeto CommandBar al hacer la
declaración de la variable, incluso abriendo mi aplicación y el libro nuevo
en la misma instancia de Excel.

Si alguien sabe el motivo, le agradecería me informase.

Saludos

Juan Carlos Perez
Asturias - España

Seguidamente detallo la macro en cuestión:

Sub Crear_Barra_de_Menu_Alfagestión()

Dim My_Menu As CommandBar, newControl, newItem, subMenu

'remove custom menu if it exists
On Error Resume Next
CommandBars("Alfagestión").Delete
On Error GoTo 0

'create new menu and display
Set My_Menu = CommandBars.Add(Name:="Alfagestión", _
Position:=msoBarTop, _
MenuBar:=False)
My_Menu.Visible = True

'add a menu to the new CommandBar
Set newControl1 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl2 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl3 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl4 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl5 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl6 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl7 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl8 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl9 = My_Menu.Controls.Add(Type:=msoControlPopup)
Set newControl10 = My_Menu.Controls.Add(Type:=msoControlPopup)
newControl1.Caption = "Alfagestión "
newControl2.Caption = "Certificados "
newControl3.Caption = "Presupuestos "
newControl4.Caption = "Ir a . . . . "
newControl5.Caption = "Modificar "
newControl6.Caption = "Listar "
newControl7.Caption = "Otras Aplicaciones "
newControl8.Caption = "Mant. BD "
newControl9.Caption = "Agenda "
newControl9.Caption = "Varios "

'add a menu item to the new menu
With newControl1
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Actualizar"
.OnAction = "Actualizando"
End With
With newControl1
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Guardar"
.OnAction = "Guardando"
End With
With newControl1
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Cerrar"
.OnAction = "Cerrando"
End With


'Crear items del menú Certificados
With newControl2
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Saldos Todas Cuentas"
.OnAction = "" 'nombre de la macro que se ejecutará
End With
With newControl2
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Saldos Imp. Sucesiones"
.OnAction = "" 'nombre de la macro que se ejecutará
End With
With newControl2
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Capacidad Económica"
.OnAction = "" 'nombre de la macro que se ejecutará
End With
With newControl2
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "de Deuda"
.OnAction = "" 'nombre de la macro que se ejecutará
End With
With newControl2
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Pensión"
.OnAction = "" 'nombre de la macro que se ejecutará
End With
With newControl2
Set newItem = .Controls.Add(Type:=msoControlButton)
'Set subMenu = .Controls.Add(Type:=msoControlPopup)
End With
With newItem
.Caption = "Pago Cuotas Seg. Social"
.OnAction = "" 'nombre de la macro que se ejecutará
End With

Exit Sub

'add a sub menu to the new menu and add items to it
With subMenu
.Caption = "Additional Choices"
Set newItem = .Controls.Add(Type:=msoControlButton)
newItem.Caption = "Check On Fishing"
newItem.OnAction = "FishingStatus"
Set newItem = _
.Controls.Add(Type:=msoControlButton)
newItem.Caption = "Check On Golfing"
newItem.OnAction = "GolfingStatus"
End With

'add a menu item that will restore the original menus
Set newItem = newControl1.Controls.Add(Type:=msoControlButton)
With newItem
.Caption = "Ocultar Barra Alfagestión"
.OnAction = "Ocultar_Barra_Alfagestión"
'This next statement adds a separator bar
.BeginGroup = True
End With

'add a menu to the new CommandBar
' Set newControl = _
' My_Menu.Controls.Add(Type:=msoControlPopup)
' newControl.Caption = "Menu2"
' Set newItem = _
' newControl.Controls.Add(Type:=msoControlButton)
' With newItem
' .Caption = "Say Goodbye"
' .OnAction = "SayGoodbye"
' End With
End Sub
 

Leer las respuestas

#1 Héctor Miguel
15/09/2006 - 06:24 | Informe spam
hola, Juan Carlos !

... tratando de hacer una macro para insertar una barra de menus personalizada en una de mis aplicaciones.
... cuando hago pruebas con un libro en blanco, si me funciona, pero cuando traslado la macro a un modulo de mi aplicacion
VBA no reconoce el objeto CommandBar al hacer la declaracion de la variable
incluso abriendo mi aplicacion y el libro nuevo en la misma instancia de Excel [...]



1) en algunas ocasiones es necesario 'calificar/emparentar/...' completamente las variables con su objeto 'Parent'
[segun versiones, parches, actualizaciones, formas de uso, y algunos otros 'detalles']
-> prueba con Dim My_Menu As Application.CommandBar
igual para: Application.CommandBars("nombre de la barra").

2) otra alternativa, que incluso podria ahorrarte unas cuantas lineas de codigo de la 'generacion al vuelo' de tus barras personalzadas...
a) crea/arregla/acomoda/asigna macros/... a tu barra y sus controles [segun sea necesario] -> en la interfase grafica de la aplicacion
b) adjunta la/s barra/s a tu libro...
1) [menu] herramientas / personalizar / [ficha] barras de herramientas
2) selecciona tu/s barra/s y pulsas el boton: adjuntar...
c) usa el evento '_beforeclose' de tu libro para eliminarla del ambiente de otras pc's
Application.CommandBars("mi barra persolan").Delete

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

Preguntas similares