Me pueden Explicar esta macro ?

Esta macro la uso para saltar de mes en mes en una barra de desplazamiento
en un formato de asistencia de personal, la función en si es ocultar y Mostar columnas solo las del centro, de la "B" a "NI"
pero al abrir visual Basic vi como esta formada la macro:
Sub mostrar() Columns("B:NI").Hidden = True Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False End Sub

Pero quiero aprender a utilizarlo para otros formatos, ya que solo va de ciertas columnas y de 31 en 31.
Por ejemplo si quiero que vaya de 10 en 10 o en 5 en 5 como o que tendré que modificar
por eso quiero entenderla, y me puedan explicar detalladamente cada función,
gracias!

1 Respuesta

Respuesta
1

Sub mostrar()
Columns("B:NI").Hidden = True ' oculta un rango de columnas desde la b hasta la NI
Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False
'esta instruccion oculta un rango de columnas que van a depender del valor que des en la celda A7, si das el valor de 1
'ocultara dede la columna 2 hasta la columna 32
End Sub

ok, gracias, hasta ahi, si entiendo, pero que o como funciona el value ? por que el *
31 - 29 y de nuevo el * 31 + 1 ,
si quiero que sea de 5 en 5 como le puedo hacer? 
ya que pues por ejemplo quiero que oculte de "C:AA" 
podría ir de 5 en 5 , 5 veces ya que son 25 columnas ,
eso aun no lo entiendo,

Pues es facil solo teclea Columns("C:AA"). Hidden = True ' oculta un rango de columnas desde la c hasta la aa y no necesitas hacerlo de 5 en 5 sino que lo puedes hacer en un solo paso.

¿Lo unico es que no entiendo el porque tienes dos instrucciones para ocultar columnas?, la primera que va de la B a la NI hace lo que pides con excepcion de la A.

No!, es que si funciona bien , la de las imaginase, pero como te digo, busco que me expliquen bien a detalle cada función.
En tu primera respuesta entendí bien como funciona ocultar y el rango.
pero pues es solo para esa función de 31 y para ese formato de asistencia.
quiero aprender a hacerla de mi cuenta, 
por ejemplo , hice una nueva, y va así..

Sub semana()

Columns("C:AA").Hidden = True Range(Columns(Range("A4").Value * "aqui no se que poner"), Columns(Range("A4").Value * "aqui no se que poner")).Hidden =False
End Sub

mi idea es que vaya de 5 en 5 , solo mostrara 5 columnas de las 25 de C a AA
igual con una barra de deslizamiento , por eso pedía ayuda a entender para yo después poder hacerlas a los espacios que yo quisiera , o no se si la de 31 esta mal, pero funciona bien 

Dejame te explico mejor las líneas que tienes están comprimidas para que sean una sola, las líneas en realidad deberían estar así.

sub semana()

Columns("B:NI").Hidden = True 
Range(Columns(Range("A7").Value * 31 - 29), Columns(Range("A7").Value * 31 + 1)).Hidden = False

end sub

tu lo que ocupas es lo siguiente

sub semana

Columns("C:AA").Hidden = True

end sub

Y si quieres dejar solo 5 de las 25 columnas supongamos que sean de la columna E a la columna I las que quieres visibles, solo tecleas este código

sub semana()

columns("C:D").hidden=true

columns("J:AA").hidden=true

end sub

Y listo lo único que tienes que definir es que filas son las que van a quedar visibles.

en serio, gracias por la ayuda!
pero mira Bro!!

la barra hace que se mueva según la celda A4 , y cada que deslizo se mueve de 5 en 5 columnas 
como en la siguen te imagen 

solo mostrando 5 columnas entre B y AB
pero con esta macro ...siguiente imagen 


pense que eran de la celda A4 mas 5 columnas menos 2 , o algo así, 
pero lo que importa es que hay su función. pero no se si "value * 5 - 2" realmente haga eso 

entonces probe una de 7 días, 
y quedo así ...


en este caso empieza de la B a AC
28 columnas , entonces la barra de deslizamiento solo tiene valores de 1 a 4
para que con la macro salte de 7 en 7 
pero puse la macro y no me da y eso que ya le puse varios valores 

ya le puse 7 menos 7, 6 , 5 , 4... y no salta de lunes a domingo 

eso en si es mi pregunta, entender esa función, para que pueda hacerla con otras barra de deslizamiento y haga los saltos que yo ocupe , o si el value afecta la referencia de la celda 
es lo que no entiendo.
no se si me entiendas!!
y gracias por tomarte el tiempo en responder , en serio me ayuda mucho a entender mas .
o dime que dato mas te hace falta 

Asi explicado ya se entiende lo que quieres que es muy diferente a tu peticion inicial lo que tu quieres es ocultar filas de lunes a viernes dependiendo del valor de la semana que actualizas con la barra de desplazamiento, en resumen quieres lo que ves en la imagen.

Si es asi entonces la macro que buscas es esta, se programa dentro del objeto scrollbar y basicamente es un sistema de coordenadas donde las variables multiplos calculan las columnas de la semana a ocultar o ver, primero se oculta todo el rango desde la columna c hasta la columna ad y luego se hacen visibles las columnas de la semana que seleccionaste con el scrollbarl, cambien un poco las instrucciones las que tenias dan mucho problema esta trabaja en funcion de rango range($C$1:$G$1) y asi sucesivamente, estos rangos se almacenan en las variables columnas, la instruccion address es para eso dandole un numero te dice a que columna corresponde 1=A, 2=B, 3=C

Private Sub ScrollBar2_Change()
n = Range("a1")
multiplo = (7 * n) - 4
multiplo2 = 7 * n
columna = Cells(1, multiplo).Address
columna2 = Cells(1, multiplo2).Address
Range("c:ad").EntireColumn.Hidden = True
Range(columna & ":" & columna2).EntireColumn.Hidden = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas