recorrer las 'otras' barras de Excel

05/12/2006 - 01:49 por Ivan | Informe spam
hola a todos

me gustaria saber si es posible recorrer las 'otras' barras (formulas,
scrollbars, filas y columnas, etiquetas de hojas, estado,...) o al
menos poder conocer su estado (visible/no visible) en determinado
momento mediante codigo. Un poco como con la coleccion commandbars.

se trata de almacenar su estado cuando se abre un archivo determinado,
que oculta todas (casi) al poner las que lleva incorporadas, para
restaurarlas a su estado original cuando se sale de el.

de momento lo hago un poco con las que se me ocurre, pero para prevenir
otras posibilidades, habia pensado que a lo mejor existe una coleccion
contenedora de dichas barras (que creo que no), o en su defecto, la
posibilidad de recorrer el valor de su estado (DisplayHeadings,
DisplayFormulaBar, DisplayStatusBar, etc )

bueno, no se si me he explicado, pero si podeis echarme una mano os lo
agradezco

un saludo y hasta pronto
Ivan
este es uno de los codigos que de momento he probado:->

Sub Reservar_Barras_Ur()
'' COPIA en una hoja las barras de
'' herramientas activas y las OCULTA
Dim BarraUs As CommandBar
Dim Num As Integer
Hoja1.Range("l:m").Clear
Num = 0
On Error Resume Next
For Each BarraUs In CommandBars
If BarraUs.Type <> msoBarTypeMenuBar And BarraUs.BuiltIn Then
If BarraUs.Visible Then
Num = Num + 1
BarraUs.Visible = False
Hoja1.Cells(Num, 12) = BarraUs.Name
End If
End If
Next BarraUs
If Application.DisplayStatusBar = True Then
Hoja1.Cells(1, 13) = "True"
Application.DisplayStatusBar = False
Else
Hoja1.Cells(1, 13) = "False"
End If
If Application.DisplayFormulaBar = True Then
Hoja1.Cells(2, 13) = "True"
Application.DisplayFormulaBar = False
Else
Hoja1.Cells(2, 13) = "False"
End If
On Error GoTo 0
End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
05/12/2006 - 07:55 | Informe spam
hola, Ivan !

... saber si es posible recorrer las 'otras' barras (formulas, scrollbars, filas y columnas, etiquetas de hojas, estado,...)
o al menos poder conocer su estado (visible/no visible) en determinado momento mediante codigo.
Un poco como con la coleccion commandbars.
se trata de almacenar su estado cuando se abre un archivo determinado, que oculta todas (casi)
al poner las que lleva incorporadas, para restaurarlas a su estado original cuando se sale de el.
de momento lo hago un poco con las que se me ocurre, pero para prevenir otras posibilidades
habia pensado que a lo mejor existe una coleccion contenedora de dichas barras (que creo que no)
o en su defecto, la posibilidad de recorrer el valor de su estado (DisplayHeadings, DisplayFormulaBar, DisplayStatusBar, etc) [...]



1) para los otros elementos graficos que necesitas 'manipular', necesitaras 'atender' a otro tipo de 'disponibilidades' [+/- como sigue]:
a) algunos pertenecen al objeto Application y 'afectan' a todos los libros abiertos en la sesion, p.e. DisplayFormulaBar
b) algunos pertenecen al objeto Window, de aplicacion general [a la ventana del libro], p.e. DisplayScrollBars
c) hay otros que pertenecen al objeto Window, de aplicacion -> para cada hoja en el libro, p.e. DisplayHeadings
[por lo que tendrias que almacenar mas celdas/variables/... segun el numero de hojas en cada libro 'presente' en la sesion] -?-

2) del codigo que expones, la 'necesidad' de la instruccion 'On Error Resume Next' [supongo que]...
se debe a que NO es posible usar la propiedad 'Visible' de la barra de menus 'activa' para establecerla en False
[debe haber al menos una barra de menus 'visile'] ;)
-> si lo que necesitas es 'impedir' el uso de la barra de menus 'integrada' de excel... prueba en su lugar con la propiedad '.Enabled'
[de todas formas 'se oculta' y podras presentar la personalizada] ;)

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

___ el codigo expuesto ___
este es uno de los codigos que de momento he probado:->
Sub Reservar_Barras_Ur()
'' COPIA en una hoja las barras de
'' herramientas activas y las OCULTA
Dim BarraUs As CommandBar
Dim Num As Integer
Hoja1.Range("l:m").Clear
Num = 0
On Error Resume Next
For Each BarraUs In CommandBars
If BarraUs.Type <> msoBarTypeMenuBar And BarraUs.BuiltIn Then
If BarraUs.Visible Then
Num = Num + 1
BarraUs.Visible = False
Hoja1.Cells(Num, 12) = BarraUs.Name
End If
End If
Next BarraUs
If Application.DisplayStatusBar = True Then
Hoja1.Cells(1, 13) = "True"
Application.DisplayStatusBar = False
Else
Hoja1.Cells(1, 13) = "False"
End If
If Application.DisplayFormulaBar = True Then
Hoja1.Cells(2, 13) = "True"
Application.DisplayFormulaBar = False
Else
Hoja1.Cells(2, 13) = "False"
End If
On Error GoTo 0
End Sub
Respuesta Responder a este mensaje
#2 Ivan
05/12/2006 - 14:59 | Informe spam
hola Hector Miguel, como siempre, muchas gracias por tu ayuda

analizando un poco tu respueta (y a falta de correr pruebas)

1) para los otros elementos graficos que necesitas 'manipular', necesitaras 'atender' a otr..
2) del codigo que expones, la 'necesidad' de la instruccion 'On Error Resume Next' [supongo que].



1) ->supongo que es posible que, excepto en lo que se refiere a las
propiedades que afectan al objeto Application (StatusBar,
FormulaBar,...??..), que supongo que si convendria controlar, el resto
se restaurarian por si solas junto con el objeto correspondiente
(Window, Workbook, worksheet,..). con lo que me podria olvidar de
ellas. ¿o quizas no seria asi?

2)-> voy a probarlo. El motivo de plantearlo con visible era sobre todo
prevenir la existencia de alguna otra barra personalizada del usuario.
¿como convendria actuar para prevenir este supuesto?

en cualquier caso muchas gracias
un saludo y hasta pronto
Ivan
Respuesta Responder a este mensaje
#3 Ivan
05/12/2006 - 17:27 | Informe spam
hola de nuevo, Hector Miguel, como siempre, no podia faltar mi 2º
mensaje

creo que me he vuelto a precipitar en mi respuesta.

2)-> voy a probarlo. El motivo de plantearlo con visible era sobre todo
prevenir la existencia de alguna otra barra personalizada del usuario



->la verdad es que el codigo lo hice hace algun tiempo y esto es lo que
creia recordar, pero al echarle un ojo con mas calma, me parece ver que
precisamente lo que si que no oculta son las barras personalizadas (del
archivo, o del usuario) ->

-> If BarraUs.Type <> msoBarTypeMenuBar And BarraUs.BuiltIn Then

para que si lo haga supongo que valdria con dejarlo en ->

-> If BarraUs.Type <> msoBarTypeMenuBar Then

en cuanto al uso de 'On Error Resume Next' ahora mismo no sabria
decirte, supongo que tendria unos cuantos errores y probe a ponerlo,
sin ocurrirseme despues quitarlo. Voy a probarlo.

y en cuanto a las barras de menus, sigue valiendo mi consulta anterior

¿como podria prevenir la existencia de alguna otra barra de menus
personalizada en el 'Excel' del usuario? .

Supongo que con Enabled=False deshabilitaria la activa. Para que la que
se muestre sea la 'nuestra' ¿habria que usar Visible junto con el
nombre de la barra, o directamente se habilitaria esta, al ser el
nuestro 'el archivo' activo?

e igual a la inversa -> al devolver el 'control' al usuario ¿se
mostraria automaticamente la barra de menus integrada, o alguna de las
(posibles)personalizadas del usuario?

supongo que para la que se muestre sea la activa en el momento de abrir
nuestro archivo, quizas convenga recurrir de nuevo al truco de la hoja.
¿o quizas haya una forma mas simple?

bueno, ya me he vuelto a enrrollar. Al menos espero que se me entienda
algo.

muchas gracias de nuevo y un saludo y hasta pronto
Ivan

PD: -> sigo sin haber podido correr pruebas
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida