Visual Basic para Aplicaciones - Macro para ocultar y mostrar hojas

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 12/06/2017 06:40:53
Hola.

Intento escribir una MACRO que muestre y oculte las hojas de mi libro de excel segun varien los calores de 2 celdas

entonces pensé en algo como esto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Private Sub Worksheet_Change(ByVal Target As Range)
'
' HideSheets Macro
'
' Acceso directo: Ctrl+Mayús+K
'
   Dim T1 As String, T2 As String, T3 As String, T4 As String, T5 As String, T6 As String, T7 As String, T8 As String
 
 
    T1 = "Hoja 1": T2 = "Hoja 2": T3 = "Hoja 3"
    T4 = "Hoja 4": T5 = "Hoja 5": T6 = "Simulador 1": T7 = "Simulador 2": T8 = "Simulador 3"
 
    If Target.Address = Worksheets("Final").Range("x3") Then ' ESTE ES EL TARGET 1
    'Esta macro Muestra y oculta las "hojas", segun las selecciones de los usuarios
    'Este "Case", muestra y oculta las hojas segun la cantidad de usuarios
        Select Case Worksheets("Final").Range("x3").Value
            Case 1:  Sheets(Array(T1, "Final")).Select
            Case 2:  Sheets(Array(T1, T2, "Final")).Select
            Case 3:  Sheets(Array(T1, T2, T3, "Final")).Select
            Case 4:  Sheets(Array(T1, T2, T3, T4, "Final")).Select
            Case 5:  Sheets(Array(T1, T2, T3, T4, T5, "Final")).Select
 
        End Select
        ActiveWindow.SelectedSheets.Visible = True
        Select Case Worksheets("Final").Range("x4").Value
            Case 1:  Sheets(Array(T5)).Select
            Case 2:  Sheets(Array(T4, T5)).Select
            Case 3:  Sheets(Array(T3, T4, T5)).Select
            Case 4:  Sheets(Array(T2, T3, T4, T5)).Select
 
        End Select
        ActiveWindow.SelectedSheets.Visible = False
        End If
    With If Target.Address = Worksheets("Final").Range("z28") Then 'ESTE ES EL TARGET 2
    'Esta segunda parte, muestra y oculta las hojas de simuladores según las opciones seleccionadas en la hoja final
    Select Case Worksheets("Final").Range("Z28").Value
        Case 1:  Sheets(Array(T6)).Select
 
    End Select
    ActiveWindow.SelectedSheets.Visible = True
 
    Select Case Worksheets("Final").Range("Z28").Value
        Case 1:  Sheets(Array(T7, T8)).Select
 
    End Select
    ActiveWindow.SelectedSheets.Visible = False
 
    Select Case Worksheets("Final").Range("Z28").Value
        Case 2:  Sheets(Array(T7)).Select
 
    End Select
    ActiveWindow.SelectedSheets.Visible = True
 
    Select Case Worksheets("Final").Range("Z28").Value
        Case 2:  Sheets(Array(T6, T8)).Select
 
    End Select
    ActiveWindow.SelectedSheets.Visible = False
 
    Select Case Worksheets("Final").Range("Z28").Value
        Case 3:  Sheets(Array(T8)).Select
 
    End Select
    ActiveWindow.SelectedSheets.Visible = True
 
    Select Case Worksheets("Final").Range("Z8").Value
        Case 3:  Sheets(Array(T7, T6)).Select
 
    End Select
    ActiveWindow.SelectedSheets.Visible = False
    End If
 
    End If
    End With
End Sub

PERO NO FUNCIONA

QUE ESTA MAL?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 12/06/2017 08:47:25
Esta todo mal.

Dos detalles para ir empezando:

Línea 13 - Que contiene esto. Que datos hay en las celdas.
1
Target.Address = Worksheets("Final").Range("x3")

Línea 34 - Y esto cómo se come
1
With If Target.Address = Worksheets("Final").Range("z28") ...

Y de la línea 36 a la 70 es un disparate que no tiene sentido.

Sube el libro y explica que deberia hacer en detalle o generico porque lo de adivinar no se da muy bien en este foro.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 12/06/2017 09:52:23
En mi anterior post falta una letra el texto, lo correcto debería ser : en detalle no genérico

He revisado la macro un poco más y el la línea 13 comparas la dirección de la celda modificada (Texto) con el contenido de una determinada celda (Numérico)

¿Tiene sentido esto?:
1
If "$B$4" = 5 Then

Pues es lo que has puesto. Por cierto ¿Sabes donde tienes que poner esta Macro para que funcione? Porque no vale en cualquier sitio.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 12/06/2017 14:00:47
Target.Address = Worksheets("Final").Range("x3")

Lo que contiente esta CELDA es un valor de 1 a 5 que en la seccion que continua con SELECT CASE, selecciona las hojas que deben mostrarse, y en

Target.Address = Worksheets("Final").Range("x4")

Funciona a la inversa, es decir, dice cuales tiene que ocultarse

Con respecto a esto:
Línea 34 - Y esto cómo se come
1
With If Target.Address = Worksheets("Final").Range("z28") ...


Y de la línea 36 a la 70 es un disparate que no tiene sentido.

Si hice me doy cuenta que hice cualquier cosa.

La idea que tengo con respecto del libro es hacerlo simple. Para esto me propuse ocultar las hojas que el USUARIO no vaya a utilizar.

El libro siempre comienza en la hoja INICIO, el usuario debe completar la cantidad de clientes que se van a analizar, En las Hojas SOLICITANTES X, se usan para analizar los ingresos de los usuarios, pero en esta oportunidad no voy a hacer nada con ellos, mas que hacer que se muestren o se oculten según la cantidad de los mismos, que viene regido por la CELDA X3 y X4 de la Hoja FINAL.
Así también en la Hoja FINAL, el USUARIO debe seleccionar una linea de prestamos con la que quiere trabajar. En esa hoja existen distintas formulas que obtienen los datos de los simuladores, según las opciones del usuario. En este caso esto esta regido por la celda Z28 con los valores 1,2,3. es decir, SI el usuario selecciona una linea determinada, el valor de la CELDA cambia a 1, 2, o 3. y la idea, es que según ese valor, se muestren o se oculten las hojas de los simuladores, según las opciones que selecciones el usuario.

Entiendo que para que la MACRO, funcione tiene que ejecutarse cuando el valor de la celda cambie, para eso uso los 4 TARGET.

Pero la verdad es que no se mucho de MACROS.

Las Macros que veras en el libro son sencillas y hacen cosas sencillas, como IMPRIMIR; GENERAR PDFs, y esas cosas.


saludos y gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 13/06/2017 08:53:16
Esta es la macro pero solo funciona parcialmente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim T1 As String, T2 As String, T3 As String, _
       T4 As String, T5 As String, T6 As String, _
       T7 As String, T8 As String, Valor As Integer
 
    T1 = "Solicitante 1"
    T2 = "Solicitante 2"
    T3 = "Solicitante 3"
    T4 = "Solicitante 4"
    T5 = "Solicitante 5"
    T6 = "Simulador R518 V11"
    T7 = "Simulador R538 V3"
    T8 = "Simulador PROCREAR"
 
    If Target.Address = "$I$7" Then
 
       ' --- Grupo - 1
 
       Sheets(T1).Visible = True
       Sheets(T2).Visible = True
       Sheets(T3).Visible = True
       Sheets(T4).Visible = True
       Sheets(T5).Visible = True
 
       Sheets(Array(T1, T2, T3, T4, T5)).Select
       Sheets(T5).Activate
       ActiveWindow.SelectedSheets.Visible = False
 
       Valor = Worksheets("Final").Range("X3").Value + 0
 
       If Valor >= 1 Then Sheets(T1).Visible = True
       If Valor >= 2 Then Sheets(T2).Visible = True
       If Valor >= 3 Then Sheets(T3).Visible = True
       If Valor >= 4 Then Sheets(T4).Visible = True
       If Valor >= 5 Then Sheets(T5).Visible = True
 
       ' --- Grupo - 2
 
       Sheets(T6).Visible = True
       Sheets(T7).Visible = True
       Sheets(T8).Visible = True
 
       Sheets(Array(T6, T7, T8)).Select
       Sheets(T5).Activate
       ActiveWindow.SelectedSheets.Visible = False
 
       Valor = Worksheets("Final").Range("X4").Value + 0
 
       If Valor = 1 Then Sheets(T6).Visible = True
       If Valor = 2 Then Sheets(T7).Visible = True
       If Valor = 3 Then Sheets(T8).Visible = True
    End If
End Sub

Esta macro solo he conseguido que funcione estando en la hoja Inicio y cuando modificas la celda I7 de solicitantes, solo es valido para el primer grupo.

¿Como funciona? Los macro Worksheet_Change( solo se ejecutan cuando están en una hoja y cuando modificas una celda, no se ejecuta cundo se recalcula una referencia, en este caso cuando se refresca la celda X3 de la hoja final no provoca que se ejecute la macro por que el contenido de la celda es una referencia y esto no cambia.

Los macro Worksheet_Change( puede haber una en cada hoja y solo se ejecutan el definido en cada hoja cuando se modifica la celda de esta hoja.

Creo que esta macro se tiene que partir en dos la primera parte en la hoja Inicio y activa tantas pestañas de solicitantes como se ponga en I7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim T1 As String, T2 As String, T3 As String, _
       T4 As String, T5 As String, Valor As Integer
 
    T1 = "Solicitante 1"
    T2 = "Solicitante 2"
    T3 = "Solicitante 3"
    T4 = "Solicitante 4"
    T5 = "Solicitante 5"
 
    If Target.Address = "$I$7" Then
       Sheets(T1).Visible = True
       Sheets(T2).Visible = True
       Sheets(T3).Visible = True
       Sheets(T4).Visible = True
       Sheets(T5).Visible = True
 
       Sheets(Array(T1, T2, T3, T4, T5)).Select
       Sheets(T5).Activate
       ActiveWindow.SelectedSheets.Visible = False
 
       Valor = Worksheets("Final").Range("X3").Value + 0
 
       If Valor >= 1 Then Sheets(T1).Visible = True
       If Valor >= 2 Then Sheets(T2).Visible = True
       If Valor >= 3 Then Sheets(T3).Visible = True
       If Valor >= 4 Then Sheets(T4).Visible = True
       If Valor >= 5 Then Sheets(T5).Visible = True
    End If
End Sub

La segunda parte en la hoja Final y se ejecuta cuando se modifiquen las celdas que afectan al valor de X4, que son G25 y N25

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim T6 As String, T7 As String, T8 As String, Valor As Integer
 
    T6 = "Simulador R518 V11"
    T7 = "Simulador R538 V3"
    T8 = "Simulador PROCREAR"
 
    If Target.Address = "$G$25" or Target.Address = "$N$25" Then
       Sheets(T6).Visible = True
       Sheets(T7).Visible = True
       Sheets(T8).Visible = True
 
       Sheets(Array(T6, T7, T8)).Select
       Sheets(T5).Activate
       ActiveWindow.SelectedSheets.Visible = False
 
       Valor = Worksheets("Final").Range("X4").Value + 0
 
       If Valor = 1 Then Sheets(T6).Visible = True
       If Valor = 2 Then Sheets(T7).Visible = True
       If Valor = 3 Then Sheets(T8).Visible = True
    End If
End Sub

Un consejo: protege las hoja y deja desprotegidas solo las celdas que se deben modificar.

Por ejemplo en la hoja Inicio serian las celdas I7, I9, I11, G14, G16, G18, G20 y G22 y así evitas que se escriba por error en una celda con formula.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 13/06/2017 11:04:47
Te envío el libro con las macros modificadas.

- He quitado la Macro de ThisWorkBook por que no era su sitio.
- La he partido en dos y uno está en la hoja Inicio y el otro en la hoja Final.
- He añadido tres líneas en cada macro con respecto al anterior Post que mejoran la ejecución.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 13/06/2017 12:54:30
Y aun se puede hacer más simple

Para la hoja INICIO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim T2 As String, T3 As String, _
       T4 As String, T5 As String, Valor As Integer
 
    T2 = "Solicitante 2": T3 = "Solicitante 3"
    T4 = "Solicitante 4": T5 = "Solicitante 5"
 
    If Target.Address = "$I$7" Then
       Application.ScreenUpdating = False
       Valor = Worksheets("Final").Range("X3").Value + 0
       Sheets(T2).Visible = IIf(Valor >= 2, True, False)
       Sheets(T3).Visible = IIf(Valor >= 3, True, False)
       Sheets(T4).Visible = IIf(Valor >= 4, True, False)
       Sheets(T5).Visible = IIf(Valor >= 5, True, False)
       Sheets("Inicio").Activate
       Application.ScreenUpdating = True
    End If
End Sub

Para la hoja FINAL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim T6 As String, T7 As String, T8 As String, Valor As Integer
 
    T6 = "Simulador R518 V11": T7 = "Simulador R538 V3": T8 = "Simulador PROCREAR"
 
    If Target.Address = "$G$25" Or Target.Address = "$N$25" Then
       Application.ScreenUpdating = False
       Valor = Worksheets("Final").Range("Z28").Value + 0
       Sheets(T6).Visible = IIf(Valor = 1, True, False)
       Sheets(T7).Visible = IIf(Valor = 2, True, False)
       Sheets(T8).Visible = IIf(Valor = 3, True, False)
       Sheets("Final").Activate
       Application.ScreenUpdating = True
    End If
End Sub

Ya me contaras que como va.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 13/06/2017 14:05:26
Muchas Gracias.

Ahora lo entiendo mejor.

Voy a probarlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 14/06/2017 01:17:43
Buenisimo Antoni. FUNCIONA 10 PUNTOS!!!!

MUCHAS GRACIAS!!!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 14/06/2017 06:33:49
Añade esta macro en la hoja Inicio

1
2
3
4
5
6
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$G$16:$K$16" And Range("I7").Value = 1 Then Range("I7").Activate: Exit Sub
    If Target.Address = "$G$18:$K$18" And Range("I7").Value = 2 Then Range("I7").Activate: Exit Sub
    If Target.Address = "$G$20:$K$20" And Range("I7").Value = 3 Then Range("I7").Activate: Exit Sub
    If Target.Address = "$G$22:$K$22" And Range("I7").Value = 4 Then Range("I7").Activate: Exit Sub
End Sub

Para que funcione bien tienes que proteger la hoja excepto las celdas de edición que son:

I7, I9, I11, G14:K14, G16:K16, G18:K18, G20:K20 y G22:K22

Y con esto veras que truco más guapo.

La clave para desproteger la hoja es X
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 15/06/2017 03:04:12
Hola Antoni.
Te ciento que probé las MACROS y todas funcionan muy bien. Es mas, las estoy adaptando a otros Excel que tengo que son similares, pero sirven para analizar otros escenarios.

En las pruebas que realice con esta MACRO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Change(ByVal Target As Range)
   Dim T6 As String, T7 As String, T8 As String, Valor As Integer
 
    T6 = "R511 - R512 - R513 V7": T7 = "Sim 520": T8 = "R512 BCRA V5"
 
    If Target.Address = "$G$24" Then
       Application.ScreenUpdating = False
       Valor = Worksheets("Final").Range("$AD$26").Value + 0
       Sheets(T6).Visible = IIf(Valor = 1, True, False)
       Sheets(T7).Visible = IIf(Valor = 2, True, False)
       Sheets(T8).Visible = IIf(Valor = 3, True, False)
       Sheets("Final").Activate
       Application.ScreenUpdating = True
    End If
End Sub

Podras observar, es la que me enviaste vos. probe la misma con otra hoja y hace lo que tiene que hacer. Pero en este caso, cuando el valor de la celda AD26, es distinto a 1,2 o 3, es decir, es FALSO, la instrucción de que la ultima hora que de los simuladores que use, o sea T6 = "R511 - R512 - R513 V7": T7 = "Sim 520": T8 = "R512 BCRA V5", alguna de esas, no se vuelve a ocultar, siempre una de ella queda visible.

Por otra parte la misma Macro ejecutada desde otra hoja("P jubilados") adaptada respectivamente para que pueda mostrar y ocultar las hojas que le indico si hace lo que tiene que hacer, es decir, cuando el valor de la celda es distinto al valor de la hoja a la que esta relacionada esta se oculta.

Ahora bien, porque quiero hacer esto?

Pues bien. en el archivo que te envió, veraz que es algo similar al anterior. Lo que quiero hacer, es que como esta escrito en el editor de VBA, el libro siempre se inicia en la hoja INICIO, pero quiero que para esta instancia todas las demás hojas estén ocultas. En la hoja INICIO hay 4 opciones para utilizar 4 o 6 hojas distintas, ya que si la opción del usuario es el cuadro de Tarjeta de crédito deben solamente mostrase las hojas relacionadas con esta opción. Creo que esto tengo que ejecutarlo con un evento CLICK, pero lo que no se hacer es si se elige opción y luego otra esta primera selección se oculten automáticamente, pero bueno, ya algo intuyo de como se debe hacer.

La idea, como en el archivo anterior es simplificarlo, haciendo que no se muestren las hojas que no son necesarias para el trabajo que uno debe realizar.


Por ultimo, y con la intención de no volverte a molestar, sabes de donde puedo descargar material para leer mas sobre esto es decir VBA?
PD: no me interesa hacer USERFORMs ajaja

Pero si me interesa aprender mas y sobre todo algo que quiero aprender a hacer es como vincular datos de EXCEL con un formulario de Abode PDF, es decir que lleve los datos de una tabla y se completen en distintos campos del formulario PDF

Saludos

\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 15/06/2017 11:22:41
Tengo algunas preguntas y una observación.

¿Los datos que se introducen en las hojas se han de guardar al cerrar el libro? Porque se puede hacer dos cosas:
1.- No pregunte al cerrar si quiere guardar.
2.- Al abrir el libro hace limpieza: borra celdas, oculta hojas, etc.

Modificare la macro para que si el valor es <1 o >3 oculte todas las hojas.

Tienes una opción de limpieza, se le puede añadir que oculte las hojas.

Entiendo por tu comentario que me envias un fichero pero no lo veo.

Saludos.
\\//_ <-- Simula el saludo de Spock (Star Trek)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 15/06/2017 14:16:27
reenviando

Me interesan las modificaciones a las Macros

Si, si entendi lo del saludo

Larga vida y prospera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 19/06/2017 10:55:50
Te envió la versión 4.00 de Análisis y afectación.

Te digo los cambios y donde puedes ver el código.

- Al abrir el libro oculta todas las hojas a excepción de Inicio y Final  ThisWoprkbook  Sub Workbook_Open()  call CleanAllSheets

- La macro de limpieza Oculta las hojas Solicitante y Simulación.  Modulo4  CleanAllSheets

- La Hoja Inicio solo activa las hojas Solicitante según datos.  Hoja88(Inicio)  Sub Worksheet_Change()

- Las celdas Solicitante solo perite editar las solicitadas  Hoja88(Inicio)  Sub Worksheet_SelectionChange()

- La hoja Final solo Activa la hoja Simulador según los datos introducidos.  Hoja83(Final)  Sub Worksheet_SelectionChange()

Veras que en la hoja Inicio solo e puede mover par las celdas que debe editar esto se consigue con una combinación de bloqueo de Celdas y Hoja.

Es importante hacerlo para que no se pueda entrar en una celda con fórmulas y borrarlas que es lo más habitual.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 21/06/2017 06:56:13
Antoni.

Cuando el archivo se abre, se ejecuta, esta instrucción:
- Al abrir el libro oculta todas las hojas a excepción de Inicio y Final  ThisWoprkbook  Sub Workbook_Open()  call CleanAllSheets


Se puede hacer, que PREGUNTE, si el usuario desde borrar los datos, o bien. la mayoría de las veces el archivo y sus datos, quedan guardados para posteriores modificaciones, por ejemplo si tenemos algún dato nuevo que debemos adicionar al análisis, y para no volverlo a hacer todo nuevamente, simplemente actualizamos la información y guardamos el archivo.

El inconveniente que surge con esto, es que es en la Hoja FINAL, en la celda H77 tengo una función que ejecuta alguna HIPERVINCULOS según la linea de crédito solicitada por el usuaria.

=SI(O(Z27=1;Z27="A");HIPERVINCULO("[Análisis y Afectación PH.xlsm]'Simulador R518 V11'!A5";W76);SI(O(Z27=2;Z27="B");HIPERVINCULO("[Análisis y Afectación PH.xlsm]'Simulador R538 V3'!A5";W76);SI(Z27=3;HIPERVINCULO("[Análisis y Afectación PH.xlsm]'Simulador PROCREAR'!A5";W76))))

Como veraz, en la funcional hace referencia al nombre del archivo, y si el nombre del archivo es modificado, esta función deja funcionar. Por este motivo los usuarios cada vez que usan el archivo y quieren guardar el análisis tienen que dejar intacto el archivo y tienen crear una carpeta con el nombre del cliente.

Por esto se me ocurre, que lo mejor, es crear un MSGBOX preguntando al usuario si desea realizar la limpieza de los datos, sino continua. o bien por el momento voy a modificar la macro para que no haga esto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 21/06/2017 11:13:40
Para poner el conforme para Borrar seria así:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Private Sub Workbook_Open()
    Dim Opc As Integer
 
    'ojo debes cambiar el nombre de la hoja
    'es decir, este debe aparecer con el
    'nombre Indice en las etiquetas del libro excel
 
    Worksheets("Final").Range("h54").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("j54").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("l54").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("n54").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("p54").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("h59").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("j59").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("l59").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("n59").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("p59").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("h64").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("j64").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("l64").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("n64").Value = Worksheets("Final").Range("v44")
    Worksheets("Final").Range("p64").Value = Worksheets("Final").Range("v44")
 
    Opc = MsgBox("Desea limpiar", vbQuestion + vbYesNo + vbDefaultButton2, "Limpieza")
    If Opc = vbYes Then
       Call CleanAllSheets
    End If
 
    Worksheets("Inicio").Select
End Sub

¿Para que es el Hipervinculo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 22/06/2017 00:19:29
Buenísimo. Desde ya mil gracias, por tu ayuda!.

la verdad que quedo de 10, hace todo lo que quería que haga. de hecho, con unas de las modificaciones que me pasaste, dejo de tirar un error en una de las macros, que no entendia de que se trataba.

Desde ya te aviso que yo no se nada de VBA, mas que nada veo algún foro o algún vídeo en youtube y trato de adaptarlo a mis necesidades.

Ahora, no quiero abusar, pero hace unos días, te envié otro de los archivos que quería hacer cosas similares.

Hasta ahora, creo, y digo creo porque no estoy seguro de hacerlo bien, hice unas macros para que cuando se ejecute se inicie en la hoja "Inicio". y que se muestre y se active la hoja según el evento CLICK en el objeto. Hasta el momento, los objetos de la hoja INICIO, están vinculados con un Hipervinculo, que no es una macro, pero esto no funciona si las hojas están ocultas.

Bueno, dejo que lo examines y me digas tus opiniones.

Adiós.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 1.134
Oro
Ha mantenido su posición en Visual Basic para Aplicaciones (en relación al último mes)
Gráfica de Visual Basic para Aplicaciones

Macro para ocultar y mostrar hojas

Publicado por Antoni Masana (498 intervenciones) el 22/06/2017 16:06:15
Haber que te parece esto que he realizado.

Abre el Fichero Excel que te envío.
En la hoja Inicio no hay Vinculos.
Las Hojas de Prestamo, Tarjeta y CNS están ocultas y solo se hace visible la del bloque que corresponda.
A cada bloque le he asignado una MACRO que encontraras en el Modulo4

Faltan más cosas pero creo que de momento esto te sirve para seguir trabajando.

Los vinculos del fichero Analisis y Afectacion HP se deberian de cambiar por: A) un vinculo al propio libro sin especificar el nombre, por que existe esta opción y funciona aunque renombres el llibro o B) una Macro.

El Hipervinculo tal y como lo has puesto puede cargar una segunda versión del mismo libro y eso seria un grabe problema.

Ya me iras contando que tal te va.

Yo también aprendo con vuestro trabajo, bueno yo y todos por que unos saben B y otros saben A y entre todos hacemos BA.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 23/06/2017 01:47:02
Antoni.

Quería decir, que probé las macros que me enviaste, y la verdad que funcionan bien, de hechos las combine con las otras que me pasaste antes, y este ultimo archivo quedo 10 puntos.

Te agradezco mucho tu ayuda!

Saludos desde Argentina!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Macro para ocultar y mostrar hojas

Publicado por Eduardol (35 intervenciones) el 08/07/2017 17:57:09
Buen día Antoni.

hace un tiempo que estoy trabajando en un proyecto, algo ambicioso de mi parte.

Se trata de completar una serie de datos, estos a su ves de compilan en otra tabla en donde se filtra el dato, es decir, se aplica un formato determinado etc.

Ahora bien, hasta ahora no hay misterio. El tema es que es la idea de hacer estas planillas es que de otra manera los usuarios finales completan los mismos datos una y otra ves y hasta 10 veces mas en unos formularios en WORD. Entonces que quiero hacer?, es que estos datos se autocompleten en los mismos formularios que guarde en PDF.

Ya se que esto mismo se puede hacer utilizando la correspondencia entre excel y word, el problema que encuentro, es que es en mi ámbito laboral, las computadoras tienen a colgarse o congelarse cuando se abren muchos archivos de word al mismo tiempo y no pasa lo mismo cuando se abren archivos PDF.

En mi ámbito laboral, la mayoría de los PCs, son unos AMD A8 con unos 2GB ram de los cuales unos 32mb estan asignados a vídeo (muy poco) Windows 7 MS Office 2013 y adobe Reader.

Llevo tiempo buscando en Internet y en el foro, un código para hacer esto.

la idea es que cuando el usuario termine de completar los datos en las planillas, estos se copien a los texbox de los pdfs y se impriman automáticamente.

la verdad es que de otra manera le lleva a cada usuario mas o menos 20 minutos completarlos, y la idea es reducir ese tiempo dramáticamente,

Te envió los archivos.

Los PDFS no están terminados, pero algunos ya tienen los Texbox.

Prometo que si le ayudas con esto, no te molesto mas.

Larga vida y prospera
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar