Mostranascondi immagini



  • Mostra/nascondi immagini
    di Fabio (utente non iscritto) data: 11/03/2015 09:06:36

    Buongiorno a tutti,
    premesso che so poco di vba, ho un file excel con una quindicina di fogli, in ognuno dei quali sono inserite le immagini di un bollo e due firme differenti, che compaiono in ogni foglio rispettivamente con il nome "bollo", "firma1" e "firma2".
    Ho la necessità di mostrare o ascondere queste immagini di bollo e firme a seconda dei casi.
    Per adesso ho risolto inserendo in ogni foglio due pulsanti, uno per mostrarle e una per nasconderle con il i seguenti codici:
    - nascondi immagini:
    Private Sub CommandButton1_Click()
    Shapes("bollo").Visible = False
    Shapes("firma fabio").Visible = False
    Shapes("firma michele").Visible = False
    End Sub

    - mostra immagini
    Private Sub CommandButton2_Click()
    Shapes("bollo").Visible = True
    Shapes("firma fabio").Visible = True
    Shapes("firma michele").Visible = True
    End Sub

    Vorrei modificare il codice, utilizzando solo due bottoni nella prima pagina, uno per mostrare e uno per nascondere le immagini, ma che agissero su tutti i fogli.
    Qualche consiglio? grazie.



  • di fabio (utente non iscritto) data: 11/03/2015 09:09:07

    ovviamente ho sbagliato la corrispondenza dei nomi delle immagini tra la spiegazione e quelli riportati nel codice, ma il succo del discorso non cambia :)
    Grazie in anticipo.



  • di Vecchio Frac data: 11/03/2015 09:31:06

    Se su tutti i fogli hai le shapes con lo stesso nome, con un semplice ciclo For Each tra i fogli puoi impostare di colpo la proprietà Visible delle forme interessate.





  • di fabio (utente non iscritto) data: 11/03/2015 09:54:25

    Come ho detto prima non so molto di vba, quel poco l'ho trovato qua e là con copia e incolla, non saprei come scrivere quello che dici, per questo chiedevo il vostro aiuto.



  • di Vecchio Frac data: 11/03/2015 10:07:46

    Una cosa così, nel codice del foglio che contiene i pulsanti nascondi e mostra.
    Devi cambiare il nome del "foglio1" nel codice ovviamente, se il foglio che contiene i due pulsanti ha un nome diverso.
     
    Option Explicit
    
    Private Sub CommandButton1_Click()
    'nasconde le forme
    Dim sh As Worksheet
        
        Application.ScreenUpdating = False
        For Each sh In ThisWorkbook.Sheets
            If LCase(sh.Name) <> "foglio1" Then
                With sh
                    .Shapes("bollo").Visible = False
                    .Shapes("firma fabio").Visible = False
                    .Shapes("firma michele").Visible = False
                End With
            End If
        Next
        Application.ScreenUpdating = True
    End Sub
    
    Private Sub CommandButton2_Click()
    'visualizza le forme
    Dim sh As Worksheet
        
        Application.ScreenUpdating = False
        For Each sh In ThisWorkbook.Sheets
            If LCase(sh.Name) <> "foglio1" Then
                With sh
                    .Shapes("bollo").Visible = True
                    .Shapes("firma fabio").Visible = True
                    .Shapes("firma michele").Visible = True
                End With
            End If
        Next
        Application.ScreenUpdating = True
    End Sub






  • di fabio (utente non iscritto) data: 11/03/2015 10:31:41

    Ciao, ti ringrazio per la risposta, però mi dà errore:
    "Errore di run-time'-2147024809 (80070057)
    Impossibile trovare l'elemento corrispondente al nome specificato"
    Però le immagini che ho inserito in ogni foglio si chiamano proprio in quel modo.
    [per attribuire il nome, una volta inserite, ho cliccato sull'immagine del bollo e nella casella nome l'ho rinominata "bollo" anzichè il nome originale che compariva (immagine 2), spero sia il modo giusto di farlo]



  • di Vecchio Frac data: 11/03/2015 11:17:41

    Verifica questo:
    cit. "Devi cambiare il nome del "foglio1" nel codice ovviamente, se il foglio che contiene i due pulsanti ha un nome diverso."

    Come si chiama il foglio che contiene i due pulsanti?





  • di fabio (utente non iscritto) data: 11/03/2015 11:22:50

    Si quello l'avevo cambiato.
    Il primo dei fogli, quello che contiene i pulsanti, ma non timbro e firme si chiama "Elenco prove" e ho sostituito questo nome a "foglio 1":

    If LCase(sh.Name) <> "Elenco prove" Then



  • di Vecchio Frac data: 11/03/2015 11:27:24

    Il problema è proprio lì :o)
    Per questo particolare test, le maiuscole fanno la differenza: "Elenco prove" è diverso da "elenco prove" (nel mio codice infatti se noti avevo scritto "foglio1" tutto minuscolo).

    Modifica quella riga come segue, perchè il test che si fa con LCase verifica la "minuscolità" di una stringa, se metti una maiuscola il test fallisce:

    If LCase(sh.Name) <> "elenco prove" Then






  • di fabio (utente non iscritto) data: 11/03/2015 11:33:09

    Perfetto! Grazie mille, adesso funziona perfettamente! :)