barra de herramientas

31/05/2007 - 17:45 por j.benito | Informe spam
Hola a todos
Tengo un conjunto de cuatro libros, que se llaman

Autorizados
Lineas
Movimientos y
Cargoencuenta

Como los he ido desarrollando mientras aprendía, las instrucciones que
tienen estan todas asociadas a botones en cada hoja.
Desde la empresa quieren que todas las provincias también trabajen con
ellos por lo que ahora quiero mejorar los libros haciendo una barra que
sea común a todos.
Crear la barra y poner los botones no me supone problema (leyendo por
ahí) siempre que sea para cada libro en particular, pero no se como
hacer para que cuando abro uno de los libros me compruebe si ya se ha
abierto otro y me cargue los botones que le son propios y en caso de que
no haya ninguno de los libros abiertos, cree la barra y le asigne los
botones.
Por la misma "regla de tres", no tengo problemas en eliminar la barra
cuando cierro un libro, pero no sé como hacer para mirar a ver si queda
alguno de los otros cuatro abiertos y mantener la barra y solo quitar
los botones de ese libro

El código que utilizo para un libro es

En ThisWorkbook

Private Sub Workbook_Open()
Dim barra As CommandBar

On Error Resume Next
Application.CommandBars("Estadisticas").Delete
On Error GoTo 0

Set barra = Application.CommandBars.Add
With barra
.Name = "Estadisticas"
.Visible = True
.Position = msoBarTop
.Protection = msoBarNoCustomize
End With
botones
End Sub


Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Estadisticas").Delete
End Sub

en un modulo normal para incorporar los botones, (solo pongo un ejemplo)

Sub botones()
Dim boton1 As CommandBarButton
Set boton1 = CommandBars("Estadisticas")._
Controls.Add(Type:=msoControlButton)
With boton1
.FaceId = 357
.OnAction = "Empresas"
.Caption = "Ver empresas remitidas"
.Visible = True
End With
End Sub


Espero haberme explicado bien.
Gracias anticipadas
J.Benito

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
01/06/2007 - 02:23 | Informe spam
hola, j.benito !

... conjunto de cuatro libros, que se llaman Autorizados, Lineas, Movimientos y Cargoencuenta
... instrucciones... asociadas a botones en cada hoja.
... quiero mejorar los libros haciendo una barra que sea comun a todos.
... barra y... botones no me supone problema (leyendo por ahi) siempre que sea para cada libro en particular
... como hacer para que cuando abro uno de... compruebe si ya se ha abierto otro y me cargue los botones que le son propios
... en caso de que no haya ninguno de los libros abiertos, cree la barra y le asigne los botones.
... no tengo problemas en eliminar la barra cuando cierro un libro
... como hacer para mirar a ver si queda alguno de los otros cuatro abiertos y mantener la barra y solo quitar los botones de ese libro



1) pareciera entenderse que...
a) las macros/acciones/... 'pertinentes/propias/aplicables/...' son distintas para cada uno de los libros -?-
b) necesitas/pretendes/... una sola barra personalizada que conjunte las acciones para todos los libros -?-
c) que de igual forma, las acciones inherentes a un libro no sean 'ejecutables' para/en/con/... otros libros ?

2) [probablemente] te convendria generar un libro 'maestro' que sea el encargado de:
a) contener los codigos aplicables para la generacion/eliminacion de la barra y todos los botones [y sus macros]
b) monitorear el libro 'activo' para des/re/habilitar 'sus' botones y macros 'inherentes/aplicables/...' [incluso la misma barra]

3) otra alternativa es usar la opcion de guardar [todos] los libros como *area de trabajo* -?-
lo que no 'evita' la necesidad de otro tipo de 'monitoreos', pero te asegura que todos los libros del *grupo* se mantienen *agrupados*

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

__ el codigo expuesto __
El codigo que utilizo para un libro es
En ThisWorkbook
Private Sub Workbook_Open()
Dim barra As CommandBar
On Error Resume Next
Application.CommandBars("Estadisticas").Delete
On Error GoTo 0
Set barra = Application.CommandBars.Add
With barra
.Name = "Estadisticas"
.Visible = True
.Position = msoBarTop
.Protection = msoBarNoCustomize
End With
botones
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.CommandBars("Estadisticas").Delete
End Sub

en un modulo normal para incorporar los botones, (solo pongo un ejemplo)
Sub botones()
Dim boton1 As CommandBarButton
Set boton1 = CommandBars("Estadisticas")._ Controls.Add(Type:=msoControlButton)
With boton1
.FaceId = 357
.OnAction = "Empresas"
.Caption = "Ver empresas remitidas"
.Visible = True
End With
End Sub
Respuesta Responder a este mensaje
#2 j.benito
01/06/2007 - 18:12 | Informe spam
Hola Hector Miguel,
Gracias por tu rápida respuesta.

te cuento



1) pareciera entenderse que...
a) las macros/acciones/... 'pertinentes/propias/aplicables/...' son distintas para cada uno de los libros -?-
b) necesitas/pretendes/... una sola barra personalizada que conjunte las acciones para todos los libros -?-
c) que de igual forma, las acciones inherentes a un libro no sean 'ejecutables' para/en/con/... otros libros ?



Todo lo que dices es correcto.No has fallado ni una. Veo que me he
explicado bien, o mejor eres capaz de entender hasta en donde no
hay. :))

2) [probablemente] te convendria generar un libro 'maestro' que sea el encargado de:
a) contener los codigos aplicables para la generacion/eliminacion de la barra y todos los botones [y sus macros]




ni idea de como hacer el libro maestro, además, como ya dije en el
primer correo, los libros los he ido haciendo sobre la marcha, (mientras
aprendía) por lo que muchas instrucciones que funcionan solo lo hacen
si las invoco desde el libro activo. De hecho, en las pruebas que he
hecho con algunos botones he tenido que modificar alguna porque solo me
funcionaban si estaba en una hoja determinada.

b) monitorear el libro 'activo' para des/re/habilitar 'sus' botones y macros 'inherentes/aplicables/...' [incluso la misma barra]



Esta es la idea que me está rondando, Cada vez que abra un libro ver si
está la barra creada y según si está o no, crearla y cargar los botones
o solamente cargar los botones.
Posteriormente al cerrar un libro ver si es el último y si es así
eliminar la barra y si no solo quitar los botones.

Lo que no sé (entre otros millones de cosas) es,
cuando abro los libros ver si la barra está ya abierta,
y cuando los cierro, ver si hay algún libro de los otros abiertos.



3) otra alternativa es usar la opcion de guardar [todos] los libros como *area de trabajo* -?-
lo que no 'evita' la necesidad de otro tipo de 'monitoreos', pero te asegura que todos los libros del *grupo* se mantienen *agrupados*



No sabía nada sobre "áreas de trabajo", pero por lo que acabo de leer no
me interesa ya que los libros no se trabajan juntos. Son libros con
datos estadísticos y comparten información pero no suelen ser utilizados
conjuntamente

Un saludo y gracias por tu tiempo/conocimientos/comentarios y tus .

J. Benito
Respuesta Responder a este mensaje
#3 Héctor Miguel
01/06/2007 - 22:58 | Informe spam
hola, j.benito !

imagino que existen mas de dos procedimientos con *requerimientos especiales* [segun sea libro/hoja/rango activos, etc. etc. etc.]
pero sin conocer *el alcance* de todos tus procedimientos [y sus implicaciones si llegaran a ejecutarse de manera equivocada]... ?
[creo que] solo te puedo sugerir algunos *lineamientos* +/- como sigue [ya extenderas explicaciones donde sea necesario] :))

1) mueve todos tus procedimientos a un solo libro, luego *creas* la barra, sus controles y sus macros correspondientes [TODOS]

2) una vez a/probados los procedimientos [previas verificaciones por los *requerimientos especiales* mencionados antes]...
a) adjuntas la barra a tu libro maestro [o si la estas creando *al vuelo*, que sea en el evento '_open' del libro maestro]
b) OCULTA la ventana del libro maestro [menu: ventana / ocultar] para que sea similar al libro de macros 'personal.xls'

3) los otros libros [Autorizados, Lineas, Movimientos y Cargoencuenta]
a) NO DEBERAN CONTENER codigo [ni controles de ningun tipo con macros asignadas] <= OJO
b) SOLAMENTE, usaras el evento '_open' de los cuatro libros con lo siguiente [para abrir una sola vez el libro maestro]

Private Sub Workbook_Open()
On Error Resume Next
If Application.CommandBars("Mi barra").Name = "" _
Then Workbooks.Open "c:\donde sea que se ecuentre\el libro maestro.xls"
End Sub

4) dentro de los codigos en el libro maestro, podras incluir rutinas de *verificacion/comprobacion/...* de que libro/hoja esta activ(o/a)
usando *antiguas* macro-funciones del tipo "On..." que deberas *inicializar* en el evento '_open' del mismo libro maestro...
OJO: SIEMPRE Y CUANDO, los libros y hojas a monitorear NO TENGAN otros codigos en sus eventos de des/activacion [p.e.]

A) en el ThisWorkbook del libro maestro

a) para ejecutar codigo del libro maestro al activar cualquier hoja en cualquier libro:
Private Sub Workbook_Open()
Application.OnSheetActivate = "Mensaje_de_prueba"
' obviamente se espera que uses una macro del tipo: -> "Macro_que_comprueba_nombres_de_hojas"
End Sub

b) para ejecutar codigo al activar cualquier libro:
[ThisWorkbook]
Private Sub Workbook_Open()
Application.OnWindow = "Mensaje_de_prueba"
' obviamente se espera que uses una macro del tipo: -> "Macro_que_comprueba_nombres_de_libros"
End Sub

B) en un modulo de codigo normal/general/estandar/... del libro maestro [las macros que llaman los procedimientos "On..."
Option Private Module
Sub Mensaje_de_prueba()
MsgBox "Mensaje corriendo desde: " & ThisWorkbook.Name & vbCr & _
"activando: " & ActiveSheet.Name & _
" desde: " & ActiveWorkbook.Name
End Sub

5) la *idea general* seria que con las macros "On..." inhabilites barras/controles/macros/... [TODAS]
y que re/habilites SOLO lo que corresponda segun la *verificacion* del libro/hoja que quedaron como 'activos' :))

esta consulta [probablemente] podria llegar a extenderse para cubrir mas eventualidades [una vez conocidas *al detalle*] :))
pero creo que con los *lineamientos* propuestos en los 5 puntos anteriores... tienes *base* para desarrollar... ;)

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

__ resumen de las consultas anteriores __
1) pareciera entenderse que...
a) las macros/acciones/... 'pertinentes/propias/aplicables/...' son distintas para cada uno de los libros -?-
b) necesitas/pretendes/... una sola barra personalizada que conjunte las acciones para todos los libros -?-
c) que de igual forma, las acciones inherentes a un libro no sean 'ejecutables' para/en/con/... otros libros ?



... correcto...

2) [probablemente] te convendria generar un libro 'maestro' que sea el encargado de:
a) contener los codigos aplicables para la generacion/eliminacion de la barra y todos los botones [y sus macros]



ni idea de como hacer el libro maestro... muchas instrucciones... funcionan solo.. si las invoco desde el libro activo.
... en... pruebas... con algunos botones he tenido que modificar alguna porque solo me funcionaban si estaba en una hoja determinada.

b) monitorear el libro 'activo' para des/re/habilitar 'sus' botones y macros 'inherentes/aplicables/...' [incluso la misma barra]



... es la idea... Cada vez que abra un libro ver si esta la barra creada y... crearla y cargar los botones o solamente cargar los botones.
... al cerrar un libro ver si es el ultimo y si es asi eliminar la barra y si no solo quitar los botones.
... no se... cuando abro los libros ver si la barra esta ya abierta, y cuando los cierro, ver si hay algun libro de los otros abiertos.
Respuesta Responder a este mensaje
#4 j.benito
02/06/2007 - 02:06 | Informe spam
Hola Hector.
Con lo que me has dado ya tengo para estudiar un buen, buen rato.
No sé si seré capaz de cambiar los procedimientos para que se realicen
desde otro libro, pero por probar que no quede.

Ya comentaré como me sale, aunque no garantizo rapidez, que soy de
asimiliación muy lenta

Gracias.
J. Benito

Héctor Miguel escribió:
hola, j.benito !

imagino que existen mas de dos procedimientos con *requerimientos especiales* [segun sea libro/hoja/rango activos, etc. etc. etc.]
pero sin conocer *el alcance* de todos tus procedimientos [y sus implicaciones si llegaran a ejecutarse de manera equivocada]... ?
[creo que] solo te puedo sugerir algunos *lineamientos* +/- como sigue [ya extenderas explicaciones donde sea necesario] :))

1) mueve todos tus procedimientos a un solo libro, luego *creas* la barra, sus controles y sus macros correspondientes [TODOS]

2) una vez a/probados los procedimientos [previas verificaciones por los *requerimientos especiales* mencionados antes]...
a) adjuntas la barra a tu libro maestro [o si la estas creando *al vuelo*, que sea en el evento '_open' del libro maestro]
b) OCULTA la ventana del libro maestro [menu: ventana / ocultar] para que sea similar al libro de macros 'personal.xls'

3) los otros libros [Autorizados, Lineas, Movimientos y Cargoencuenta]
a) NO DEBERAN CONTENER codigo [ni controles de ningun tipo con macros asignadas] <= OJO
b) SOLAMENTE, usaras el evento '_open' de los cuatro libros con lo siguiente [para abrir una sola vez el libro maestro]

Private Sub Workbook_Open()
On Error Resume Next
If Application.CommandBars("Mi barra").Name = "" _
Then Workbooks.Open "c:\donde sea que se ecuentre\el libro maestro.xls"
End Sub

4) dentro de los codigos en el libro maestro, podras incluir rutinas de *verificacion/comprobacion/...* de que libro/hoja esta activ(o/a)
usando *antiguas* macro-funciones del tipo "On..." que deberas *inicializar* en el evento '_open' del mismo libro maestro...
OJO: SIEMPRE Y CUANDO, los libros y hojas a monitorear NO TENGAN otros codigos en sus eventos de des/activacion [p.e.]

A) en el ThisWorkbook del libro maestro

a) para ejecutar codigo del libro maestro al activar cualquier hoja en cualquier libro:
Private Sub Workbook_Open()
Application.OnSheetActivate = "Mensaje_de_prueba"
' obviamente se espera que uses una macro del tipo: -> "Macro_que_comprueba_nombres_de_hojas"
End Sub

b) para ejecutar codigo al activar cualquier libro:
[ThisWorkbook]
Private Sub Workbook_Open()
Application.OnWindow = "Mensaje_de_prueba"
' obviamente se espera que uses una macro del tipo: -> "Macro_que_comprueba_nombres_de_libros"
End Sub

B) en un modulo de codigo normal/general/estandar/... del libro maestro [las macros que llaman los procedimientos "On..."
Option Private Module
Sub Mensaje_de_prueba()
MsgBox "Mensaje corriendo desde: " & ThisWorkbook.Name & vbCr & _
"activando: " & ActiveSheet.Name & _
" desde: " & ActiveWorkbook.Name
End Sub

5) la *idea general* seria que con las macros "On..." inhabilites barras/controles/macros/... [TODAS]
y que re/habilites SOLO lo que corresponda segun la *verificacion* del libro/hoja que quedaron como 'activos' :))

esta consulta [probablemente] podria llegar a extenderse para cubrir mas eventualidades [una vez conocidas *al detalle*] :))
pero creo que con los *lineamientos* propuestos en los 5 puntos anteriores... tienes *base* para desarrollar... ;)

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

__ resumen de las consultas anteriores __
1) pareciera entenderse que...
a) las macros/acciones/... 'pertinentes/propias/aplicables/...' son distintas para cada uno de los libros -?-
b) necesitas/pretendes/... una sola barra personalizada que conjunte las acciones para todos los libros -?-
c) que de igual forma, las acciones inherentes a un libro no sean 'ejecutables' para/en/con/... otros libros ?


... correcto...

2) [probablemente] te convendria generar un libro 'maestro' que sea el encargado de:
a) contener los codigos aplicables para la generacion/eliminacion de la barra y todos los botones [y sus macros]


ni idea de como hacer el libro maestro... muchas instrucciones... funcionan solo.. si las invoco desde el libro activo.
... en... pruebas... con algunos botones he tenido que modificar alguna porque solo me funcionaban si estaba en una hoja determinada.

b) monitorear el libro 'activo' para des/re/habilitar 'sus' botones y macros 'inherentes/aplicables/...' [incluso la misma barra]


... es la idea... Cada vez que abra un libro ver si esta la barra creada y... crearla y cargar los botones o solamente cargar los botones.
... al cerrar un libro ver si es el ultimo y si es asi eliminar la barra y si no solo quitar los botones.
... no se... cuando abro los libros ver si la barra esta ya abierta, y cuando los cierro, ver si hay algun libro de los otros abiertos.




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida