Estimados amigos !!! Llevo mas de un año sin publicar una entrada en mi querido Blog, espero que sepan disculpar tamaña falta de respeto hacia todos mis lectores. Problemas de índole personales y laborales me llevaron a dejar es hobbie tan hermoso que tengo, pero de a poco voy retornando. Espero, de ahora en mas, cumplir con mis publicaciones semanales y ayudar con las consultas que me realicen, mas allá de que esto último lo estuve haciendo a través de mi página en Facebook (
https://www.facebook.com/excel.maniacos)
Bueno, vasta de disculpas (aunque las merecen sobradamente) y volvamos al trabajo. Me hicieron una consulta bastante interesante y levantaré un post al respecto: "tengo un libro cualquiera, con algunas hojas 'invisibles'... ¿como hago para mostrarlas y poder ver su contenido?". Este lector y amigo ha tenido mucha suerte en que, generalmente, debo programar en entornos muy restringidos, lo cual me volvió un poco "práctico" sobre estos asuntos de andar averiguando como ver cosas que otros ocultaron. Empecemos.
[+/-] Ver el resto / Ocultar
Para comenzar correctamente, daremos un repaso sobre el tema de la visibilidad de las hojas, las cuales pueden ostentar 3 estados:
-1 Visible (xlSheetVisible)
0 Oculta (xlSheetHidden)
2 Muy Oculta (xlSheetVeryHidden)
La primera no merece mayores observaciones: visible; si, esa que estamos viendo y punto. La segunda, una hoja oculta (hidden), es la que ocultamos desde el menú respectivo (formato / hoja / ocultar) o, en Excel 2013, desde la pestaña "Inicio", grupo "Formato", opción "Ocultar y mostrar", "Ocultar hoja". Esto hará que la hoja activa "desaparezca"... pero nuestro usuario sabrá que existen hojas ocultas.
Para hacer "invisible" una hoja (y que nadie se de cuenta de ello) debemos ir hasta el editor de VBA y seleccionar dicha hoja desde el Explorador de proyectos y, desde la ventana de propiedades, poner el atributo "visible" en xlVeryHidden:
Selecciono la Hoja2 y, debajo, cambio a "muy oculta"
Lo dicho hasta el momento ocultará la hoja en cuestión, con una ventaja bastante grande: nuestros usuarios no se darán cuenta, en ningún momento, que esa hoja existe. Tenemos otra forma de realizar este procedimiento, y es mediante una macro:
Hasta aquí todo bien. Pero mi amigo, y por suerte es un amigo, me la complica: "Damián-me dice-si alguien me pasa un libro de Excel ¿como puedo hacer para averiguar si contiene hojas 'muy ocultas'?... Y si están ¿puedo mostrarlas?". Y, desde ya, mi respuesta es: si.
El procedimiento es sencillo y primero veremos los pasos lógicos a seguir:
1) abrir el libro que, supuestamente, posee hojas en estado xlSheetVeryHidden
2) ir a nuestra macro e indicarle el nombre del libro
3) recorrer todas las hojas del libro, preguntando si está oculta (estado "2" o "xlSheetVeryHidden")
4) si el punto 4 es verdadero, mostrar la hoja, colocándole el estado "0" o "xlSheetVisible"
Lo anteriormente expuesto quedaría, mas o menos, así:
el código es breve, sencillo y bien comentado para una mejor interpretación
Bueno amigos, que me han dado la inmensa alegría de superar el medio millón de visitas, nos vemos pronto en otra entrada. Espero que les sea de utilidad y puedan aplicar este ejemplo a sus proyectos.
Salu2.xlsx
link al archivo
Damian, gracias por la macro que puede servir si hay muchas hojas ocultas.
ResponderEliminarCuando hay pocas hojas muy ocultas, aunque el usuario no las vea, si que se ven en el editor VBA y se puede cambiar su propiedad Visible en cualquier momento, excepto cuando se intenta ocultar la última hoja visible, pues siempre tiene que haber una visible lo que indica Excel con un mensaje de aviso.
Bienvenido de nuevo a la visibilidad de los blogs.
Hola Pedro !!! Estimado amigo, gracias por tus comentarios y aportes, realmente sos un gran gran programador en Excel, conocedor de herramientas y técnicas muy complejas.
ResponderEliminarVos sabes que de este tema en particular, cuando lo "resolví" hace muchos años, me llamó la atención que aunque el VBA del libro esté bloqueado para visualización, con password incluído, este sencillo código muestra la hoja oculta. Todo un tema, ya que siempre le aconsejo a mis lectores no usar Excel para almacenar información sensible, ya que siempre se puede crackear y así quedar nuestros datos expuestos.
Un gran abrazo. Sobre el margen izquierdo, deboajo de "Ver Mapa", agregué un link a tu Blog, para que los que visiten el mío tengan la oportunidad de ir hacia el tuyo y conocer esos grandes sistemas que creas.
Saludos, Estoy haciendo una macro que me saque un resumen en este caso de las ventas de un mes, con lo que he aprendido y con la ayuda de la grabadora de macros logre sacar un codigo que ordena los datos de la hoja Cons.Ventas Por Proveedor luego insetar subtotales de ahi delvuelve a la hoja Resumen los datos de estos subtotales con las caracteristicas que nesesito. Hasta ahi bien. El problema que tengo es que el bucle que deberia dar fin a la ejecucion de la macro no funciona y la macro se sigue ejecutando devolviendo al final de la hoja Resumen datos que no corresponden.
ResponderEliminarCodigo.
Sub ResumenInventario()
'Application.ScreenUpdating = False
Application.CutCopyMode = False
Worksheets("Cons. Vtas por proveedor").Activate
ActiveWorkbook.Worksheets("Cons. Vtas por proveedor").Sort.SortFields.Add Key _
:=Range("D1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
'Selection.Sort Key1:=Range("d1"), Order1:=xlAscending, Header:=xlGuess, _
'OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ActiveWorkbook.Worksheets("Cons. Vtas por proveedor").Sort.SortFields.Add Key _
:=Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
'Selection.Sort Key1:=Range("a1"), Order1:=xlAscending, Header:=xlGuess, _
'OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Range("a1").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Subtotal GroupBy:=4, Function:=xlSum, TotalList:=Array(5, 7), _
Replace:=True, PageBreaks:=False, SummaryBelowData:=True
Range("D10000").End(xlUp).Offset(1, 0).Value = "1"
Worksheets("Resumen").Activate
Range("B3").Select
Worksheets("Cons. Vtas por proveedor").Activate
Range("d1").Select
Do While ActiveCell.Value <> "1"
Application.CutCopyMode = False
Cells.Find(What:="Total", After:=ActiveCell, SearchOrder:=xlByColumns).Activate
ActiveCell.Offset(-1, -3).Select
Selection.Copy
Worksheets("Resumen").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Worksheets("Cons. Vtas por proveedor").Activate
ActiveCell.Offset(0, 3).Select
Selection.Copy
Worksheets("Resumen").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Worksheets("Cons. Vtas por proveedor").Activate
ActiveCell.Offset(0, 8).Select
Selection.Copy
Worksheets("Resumen").Activate
ActiveSheet.Paste
ActiveCell.Offset(0, 1).Select
Worksheets("Cons. Vtas por proveedor").Activate
ActiveCell.Offset(0, 1).Select
Selection.Copy
Worksheets("Resumen").Activate
ActiveSheet.Paste
Worksheets("Cons. Vtas por proveedor").Activate
ActiveCell.Offset(1, -6).Select
Selection.Copy
Worksheets("Resumen").Activate
ActiveCell.Offset(0, 4).Select
Selection.PasteSpecial Paste:=xlPasteValues
ActiveCell.Offset(0, -1).Select
Worksheets("Cons. Vtas por proveedor").Activate
ActiveCell.Offset(0, -2).Select
Selection.Copy
ActiveCell.Offset(0, -1).Select
Worksheets("Resumen").Activate
Selection.PasteSpecial Paste:=xlPasteValues
ActiveCell.Offset(1, -6).Select
Worksheets("Cons. Vtas por proveedor").Activate
Loop
'Range("a:n").Select
'Selection.RemoveSubtotal
'Range("A1").Select
'Application.ScreenUpdating = True
End Sub
Saludos
LuisV
vas a tener que enviarme el archivo por que no comprendo muy bien el código, como así tampoco la condición que le estás dando al bucle para que se ejecute. necesito ir haciendo el paso a paso y ver si esa forma de grabar la macro sirve ante cambios en la cantidad de registros.
ResponderEliminarDamian vos sabes que estaróa necesitando que en una un sumar.si que contenga 4 número por ejemplo que me sume 112225,112280,112298,112255, es decir que me sume los valores que contenga1122, sludos.
ResponderEliminarAquí te dejo el link a la entrada que armé con tu consulta:
ResponderEliminarhttp://damianexcel.blogspot.com.ar/2014/03/una-mas-de-suma-condicional-en-excel.html
Suerte y cualquier cosa me avisas