Macro para mostrar y ocultar filas

14/05/2005 - 03:40 por Rene Palacios | Informe spam
tengo estas dos macro :

Sub EsconderFilas()
Application.ScreenUpdating = False
Dim Rango As Range, c As Range

Set Rango = Range("C8:C42")
For Each c In Rango
c.EntireRow.Hidden = _
(c.Value = 0 Or c.Value = "")
Next c
Application.ScreenUpdating = True
End Sub
Sub MostrarFilas()
Application.ScreenUpdating = False
Dim Rango As Range, c As Range

Set Rango = Range("C8:C42")
For Each c In Rango
c.EntireRow.Hidden = False
Next c
Application.ScreenUpdating = True
End Sub


Funciona bien cuando la hoja del libro no esa protegida pero yo necesito q
este protegida cuando corro la macro me sale error :

No se puede asinar la propiedad Hidden de la clase Range

y esta resaltado en amarillo:
c.EntireRow.Hidden = _
(c.Value = 0 Or c.Value = "")
si es esconder y si es mostrar esta resaltado en amarillo:
c.EntireRow.Hidden = False

me pueden ayudar a q funcione bien estando la hoja protegida con una clave q
yo le asigne espero su ayuda gracias de antemano

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
14/05/2005 - 04:13 | Informe spam
hola, Rene !

tengo estas dos macro [...]
... la hoja... necesito q este protegida cuando corro la macro me sale error [...]



si necesitas que la proteccion NO 'afecte' a tus macros ->SIN tener que [des/re]proteger la hoja<-
puedes usar la instruccion de 'solo interfase de usuario' [p.e.]
=> en excel 97 y 2000 NO necesitas 'repetir' el password <= es 'suficiente' con poner:
en el modulo de codigo del libro ==Private Sub Workbook_Open()
Worksheets("Hoja1").Protect UserInterfaceOnly:=True
End Sub
¨¨¨¨¨¨¨¨¨¨¨¨
=> a partir de excel 2002 [xp] SI es requisito 'repetir' el password :-( < en el modulo de codigo del libro ==Private Sub Workbook_Open()
Worksheets("Hoja1").Protect _
PassWord:="la MISMA cOntRaSeÑa qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub
¨¨¨¨¨¨¨¨¨¨¨¨
[practicamente] TODO lo que 'hagas por codigo'... pasara 'sin problemas?

saludos,
hector.

p.d. puedes 'adelgazar' el codigo de las macros +/- como sigue...
Sub EsconderFilas()
Application.ScreenUpdating = False
Dim Celda As Range
For Each Celda In Range("c8:c42")
Celda.EntireRow.Hidden = (Celda = 0 Or Celda = "")
Next
End Sub
Sub MostrarFilas()
Range("c8:c42").EntireRow.Hidden = False
End Sub
Respuesta Responder a este mensaje
#2 Rene Palacios
14/05/2005 - 23:56 | Informe spam
Gracias Hector Miguel pero como puedo hacer para q funciones en mas hojas yo
tengo esas macros en mas de 15 hojas.
Respuesta Responder a este mensaje
#3 Héctor Miguel
15/05/2005 - 03:25 | Informe spam
hola, Rene !

... q funcionen... esas macros en mas de 15 hojas.



revisa cual/es de las alternativas siguientes resulta mas 'conveniente' ;)
si cualquier duda... comentas?
saludos,
hector.
=1.- suponiendo que las 15 hojas son TODAS las hojas [de calculo] en el libro...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets
Hoja.Protect UserInterfaceOnly:=True
Next
End Sub
Hoja.Protect _
PassWord:="la MISMA cOntRaSeÑa qUe lE pUsISte", _
UserInterfaceOnly:=True
=2.- si las 15 hojas son [solo] una parte del total de hojas en el libro
[y en caso de que sea la misma contraseña para todas las hojas -xp/2003-]...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets(Array("Hoja1", "Hoja3", "Hoja5"))
' pon aqui la instruccion Protect segun excel 97/2k o xp/2003'
Next
End Sub
=3.- si se trata de excel xp/2003 Y ES 'diferente' la contraseña de cada hoja...
Private Sub Workbook_Open()
Dim Hoja, Pass, Sig As Byte
Hoja = Array("Hoja1", "Hoja3", "Hoja5")
Pass = Array("Pass1", "Pass2", "Pass3")
For Sig = LBound(Hoja) To UBound(Hoja)
Worksheets(Hoja(Sig)).Protect _
PassWord:=Pass(Sig), _
UserInterfaceOnly:=True
Next
End Sub
== [notas] =a) complementa las matrices [Array("Hoja1", "Hoja3", ...)] con los nombres de las hojas
b) podrias cambiar las matrices para 'localizar' las hojas por su indice/posicion [no por su nombre]
c) [probablemente] necesitaras proteger [tambien] el libro [por la estructura de las ventanas]
-por si quieres 'evitar' que el usuario mueva de posicion las hojas o les cambie el nombre- ;)
d) [o quizas] podrias utilizar los 'codename' de las hojas [para no 'restringir demasiado' al usuario] :))
Respuesta Responder a este mensaje
#4 hilde
13/04/2011 - 20:53 | Informe spam
Héctor Miguel escribió el 15/05/2005 03:25 :
hola, Rene !

... q funcionen... esas macros en mas de 15 hojas.




revisa cual/es de las alternativas siguientes resulta mas 'conveniente' ;)
si cualquier duda... comentas?
saludos,
hector.
=1.- suponiendo que las 15 hojas son TODAS las hojas [de calculo] en el
libro...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets
Hoja.Protect UserInterfaceOnly:=True
Next
End Sub
Hoja.Protect _
PassWord:="la MISMA cOntRaSeÑa qUe lE pUsISte", _
UserInterfaceOnly:=True
=2.- si las 15 hojas son [solo] una parte del total de hojas en el libro
[y en caso de que sea la misma contraseña para todas las hojas
-xp/2003-]...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets(Array("Hoja1", "Hoja3",
"Hoja5"))
' pon aqui la instruccion Protect segun excel 97/2k o xp/2003'
Next
End Sub
=3.- si se trata de excel xp/2003 Y ES 'diferente' la contraseña de cada
hoja...
Private Sub Workbook_Open()
Dim Hoja, Pass, Sig As Byte
Hoja = Array("Hoja1", "Hoja3", "Hoja5")
Pass = Array("Pass1", "Pass2", "Pass3")
For Sig = LBound(Hoja) To UBound(Hoja)
Worksheets(Hoja(Sig)).Protect _
PassWord:=Pass(Sig), _
UserInterfaceOnly:=True
Next
End Sub
== [notas] =a) complementa las matrices [Array("Hoja1",
"Hoja3", ...)] con los nombres de las hojas
b) podrias cambiar las matrices para 'localizar' las hojas por su
indice/posicion [no por su nombre]
c) [probablemente] necesitaras proteger [tambien] el libro [por la estructura
de las ventanas]
-por si quieres 'evitar' que el usuario mueva de posicion las hojas o les
cambie el nombre- ;)
d) [o quizas] podrias utilizar los 'codename' de las hojas [para no 'restringir
demasiado' al usuario] :))


Hola Héctor Miguel, tengo la misma situación que René y he copiado para mi macro tus sugerencia pero no me funciona. Me podrías ayudar a resolver el error. Te adelanto que tengo Microsoft Excel 2010.
A continuación te indico la consulta que hice hoy y que aparece junto con todas las demás en la página Microsoft Office:

Soy nueva en este foro y estoy aprendiendo a golpes VB.
Tengo un trabajo en Excel, que tiene 20 hojas, de las cuales 12 contiene información de cada mes. En cada una de ellas hay filas con valores iguales a cero. Bien, la hoja la tengo protegida para que no sean modificadas ciertas celdas por el usuario que ingresa datos, y lo que quiero es que al imprimir la hoja se oculten las filas con valor cero y luego se vuelvan a mostrar.
Vi una respuesta que dió Héctor Miguel a René, en Mayo de 2005, pero a mi no me ha funcionado.
Por favor, me pueden ayudar a descubrir dónde está el error, porque ya estoy verde.
Gracias
Mis códigos son:

Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets
Hoja.Protect _
Password:="123", UserInterfaceOnly:=True
End Sub

Sub OcultarFilas()
Application.ScreenUpdating = False
Dim Celda As Range
For Each Celda In Range("k1:k101")
Celda.EntireRow.Hidden = (Celda = 0 Or Celda = "")
Next
End Sub

Sub MostrarFilas()
Range("k1:k101").EntireRow.Hidden = False
End Sub

Si la hoja no está protegida funciona, aunque se tarda al ocultar las filas y al mostrarla.
Cuando la protejo y darle click al botón ocultar, se pone en amarillo :
Celda.EntireRow.Hidden = (Celda = 0 Or Celda = "")

Al darle click al botón Mostrar se pone en amarillo:

Range("k1:k101").EntireRow.Hidden = False

Podrías decirme el código para imprimir la hoja protegida, una vez ocultas las filas iguales a cero, mostrar filas ocultas, seguir trabajando en la hoja, volver a ocultar filas=0 , Imprimir, mostrar filas ocultas y así sucesivamente.


Mil gracias por su atención
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida