Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: sandri en 12 Noviembre 2018, 10:17 am



Título: Macro excel PivotItems propiedad Visible
Publicado por: sandri en 12 Noviembre 2018, 10:17 am
Buenos días,

Estoy haciendo una macro para q cuando pulsen un botón actualizar tabla dinámica lo que haga es cambiar de la lista desplegable el mes que se quiere filtrar. Para ello lo que hago es deshabilitar todos los campos de la lista desplegable (Enero, Febrero, Marzo....) para luego activar el mes que ha seleccionado el usuario. Copio el código:


mes = Worksheets("Datos Peugeot").Range("AX1").Value
Worksheets("Diego").PivotTables("Diego2").PivotFields("MES ENTREGA").CurrentPage = "(All)"
    With Worksheets("Diego").PivotTables("Diego2").PivotFields("MES ENTREGA")
        .PivotItems("ENERO").Visible = False
        .PivotItems("FEBRERO").Visible = False
        .PivotItems("MARZO").Visible = False
        .PivotItems("ABRIL").Visible = False
        .PivotItems("MAYO").Visible = False
        .PivotItems("JUNIO").Visible = False
        .PivotItems("JULIO").Visible = False
        .PivotItems("AGOSTO").Visible = False
        .PivotItems("SEPTIEMBRE").Visible = True
        .PivotItems("OCTUBRE").Visible = False
        .PivotItems("NOVIEMBRE").Visible = False
        .PivotItems("DICIEMBRE").Visible = False
        .PivotItems(mes).Visible = True
    End With


Cuando me llega al mes que esta en Visible = True me da el siguiente error:

No se puede asignar la propiedad Visible de la clase PivotItems.

Alguien sabe como podría solucionar esto?

Gracias de antemano.


Título: Re: Macro excel PivotItems propiedad Visible
Publicado por: Serapis en 13 Noviembre 2018, 12:34 pm
Suponiendo que "AX1" se refiera a una casilla en exclusiva y no a un rango de ellas...

Probablemente, porque el 'mes' pasado (el recogido) no exista como tal...
Puedes hacer dos cosas... la primera es probar si se soluciona con una simple conversión (a mayúsculas), la segunda es investigar si existe...

La primera opción:
Cambia de esto
Código
  1. .PivotItems(mes).Visible = True
a exto:
Código
  1. .PivotItems(ucase$(mes)).Visible = True

Puede que incluso tenga algún espacio delante y/o detrás... así que mejor aún así:
Código
  1. .PivotItems(ucase$(trim$(mes))).Visible = True

Si a pesar de ello da error, intercéptalo:

Código
  1. dim meses as string="ENERO,FEBRERO,...DICIEMBRE"
  2.  
  3. if (instr(meses, mes)>0) then
  4.    .PivotItems(ucase$(trim$((mes))).Visible = True
  5. else
  6.    msgbox "se está intentando pasar por como mes, el texto " & mes & " que no es un miembro reconocido en 'pivotitems' "
  7. end if


Nota que si has copiado y pegado el contenido tal cual lo tienes en tu código, tienes el mes de septiembre a TRUE, seguramente se te ha pasado indicarle FALSE:
Código
  1. .PivotItems("SEPTIEMBRE").Visible = True
  2. end if

Si a pesar de todo te sigue dando error, deberás ofrecer una mejor descripción de PivotItems...


Título: Re: Macro excel PivotItems propiedad Visible
Publicado por: sandri en 13 Noviembre 2018, 14:09 pm
Gracias por la respuesta NEBIRE.

Creo que me he explicado mal. El error me da en el momento de llegar a un elemento que esta en true (seleccionado) y lo quiero poner en falso. Por ejemplo, tengo seleccionado Septiembre y cuando llego a el y hago esto: .PivotItems("SEPTIEMBRE").Visible = False, es cuando me sale el error.

Con esto: .PivotItems(mes).Visible = True, no tengo problema me lo selecciona correctamente. Es a la hora de deshabilitar (quitar la selección)

Lo último de la NOTA ya lo cambie, se me coló

No se si me he explicado bien


Título: Re: Macro excel PivotItems propiedad Visible
Publicado por: sandri en 19 Noviembre 2018, 12:58 pm
He conseguido solucionarlo, os lo pongo por si a alguien le fuera util.

El problema era poner visible a false a todas las opciones (sin que hubiera ninguna en true) por eso había que poner primero una opción a true y luego todos los demás a false. Pongo el ejemplo:

Worksheets("Diego").PivotTables("Diego1").PivotFields("MES").CurrentPage = "(All)"
    With Worksheets("Diego").PivotTables("Diego1").PivotFields("MES")
        'tengo que controlar el mes para no ponerlo en false
        .PivotItems(mes).Visible = True
        If Not mes = "ENERO" Then
            .PivotItems("ENERO").Visible = False
        End If
        If Not mes = "FEBRERO" Then
            .PivotItems("FEBRERO").Visible = False
        End If
        If Not mes = "MARZO" Then
            .PivotItems("MARZO").Visible = False
        End If
        If Not mes = "ABRIL" Then
            .PivotItems("ABRIL").Visible = False
        End If
        If Not mes = "MAYO" Then
            .PivotItems("MAYO").Visible = False
        End If
        If Not mes = "JUNIO" Then
            .PivotItems("JUNIO").Visible = False
        End If
        If Not mes = "JULIO" Then
            .PivotItems("JULIO").Visible = False
        End If
        If Not mes = "AGOSTO" Then
            .PivotItems("AGOSTO").Visible = False
        End If
        If Not mes = "SEPTIEMBRE" Then
            .PivotItems("SEPTIEMBRE").Visible = False
        End If
        If Not mes = "OCTUBRE" Then
            .PivotItems("OCTUBRE").Visible = False
        End If
        If Not mes = "NOVIEMBRE" Then
            .PivotItems("NOVIEMBRE").Visible = False
        End If
        If Not mes = "DICIEMBRE" Then
            .PivotItems("DICIEMBRE").Visible = False
        End If
    End With