Risolto Grafico che scompare se si attiva macro

Paolo67

Utente abituale
4 Dicembre 2016
118
18
Montefeltro (PU)
2003
0
Ho sostituito "Grafico 29" ma non cambia nulla...il grafico continua a scomparire.
Avete fatto la prova direttamente voi?
Certo. Funziona senza problemi. il Grafico 29 rimane lì, visibile, esattamente dove si trova.

A questo punto è possibile che tu abbia delle altre macro che eseguono operazioni del genere? e che vengano richiamate senza che tu ne sia consapevole?

TheTruster
A me continua a scomparire.
Altre macro che girano non ci sono (dovrebbero esserci altri codici giusto?)
Unico dubbio è quello del nome del grafico inesatto.
Come fai a stabilirlo?
Mi confermi che ci vai su cliccando l'area e ti compare il nome in alto a sx nella casellina?Questa opperazione avverebbe solo se è aperta anche la paginetta del codice...
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
A me continua a scomparire.
Altre macro che girano non ci sono (dovrebbero esserci altri codici giusto?)
Unico dubbio è quello del nome del grafico inesatto.
Come fai a stabilirlo?
Mi confermi che ci vai su cliccando l'area e ti compare il nome in alto a sx nella casellina?Questa opperazione avverebbe solo se è aperta anche la paginetta del codice...
Confermo che il nome del grafico l'ho desunto da ciò che appare dalla casella a sinistra, selezionando il grafico.
Inoltre nel ciclo For...Each, ho impostato inserito l'istruzione

Debug.Print sh.Name

e questa è la lista degli oggetti che viene ciclata:

Codice:
Picture 6
Picture 7
Picture 8
Picture 9
Grafico 16   '<--------
Grafico 19   '<--------
Picture 21
Picture 22
Picture 23
Picture 24
Picture 25
Picture 26
Picture 27
Picture 28
Grafico 29   '<--------
Comment 1
Comment 2
Comment 3
Comment 4
Comment 5
Comment 10
Comment 11
Comment 12
Comment 13
Comment 14
Comment 15
Comment 17
Comment 18
Comment 20
Come vedi ci sono altri 2 Grafici, con nomi diversi, ma esiste sicuramente Grafico 29 che, con il codice che ti ho postato non viene nascosto, perchè la If...Then consente di "saltare" questo passaggio.

Giusto per un'ulteriore incontrovertibile verifica, usando questo codice:

Visual Basic:
    For Each Sh In ActiveSheet.Shapes
        Debug.Print Sh.Name
        If Sh.Name <> "Grafico 29" Then
            Sh.Top = 140
            Sh.Left = 130
            Sh.Visible = msoFalse
        Else
            Stop
        End If
    Next
il codice ferma la sua esecuzione quando viene rilevato il nome "Grafico 29".

TheTruster
 

rollis13

VBA Expert
Expert
15 Novembre 2015
2.456
115
Cordenons
Office 2016 x32
196
Adesso siamo in due a darti conferma che la modifica proposta da TheTruster @TheTruster , ancora nel post #7, è risolutiva e dato che ora siamo al post #24 credo che hai 'taciuto' altro oltre a quanto hai riportato fino ad ora.
 

Paolo67

Utente abituale
4 Dicembre 2016
118
18
Montefeltro (PU)
2003
0
Adesso siamo in due a darti conferma che la modifica proposta da TheTruster @TheTruster , ancora nel post #7, è risolutiva e dato che ora siamo al post #24 credo che hai 'taciuto' altro oltre a quanto hai riportato fino ad ora.
Io non sto dicendo che avete torto ...ci mancherebbe.
Nè ho taciuto o nascosto qualcosa.
Sono io che non riesco a risolvere il problema.
Ad esempio ho riscaricato il mio stesso file che avevo allegato qui sul forum,ricopiato il codice "funzionante" al suo interno e lanciato!
Dovrebbe funzionare no?
A voi succede...a me invece no!
Probabilmente c'è qualche cosa che inibisce la buona riuscita dell'operazione ma che io...non so trovare (non so programmare in VBA).
A questo punto inutile continuare a dilungarsi,vorrà dire che farò a meno di questo benedetto grafico.
Vi ringrazio cmq per la vostra disponibilità
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
Ho ripreso il tuo file originale ed ho inserito io il codice. A me funziona senza problemi.

Ho notato, però, che si verifica un errore quando cerchi di rendere visibile l'Immagine 29, perchè questa non è presente, quindi ho commentato quella riga.

Ho anche inserito una routine che permette di mostrare tutte le Shapes nascoste perchè, secondo me, devi fare un po' di pulizia tra gli oggetti disposti sul foglio di lavoro.
Inoltre ti consiglio vivamente di dare dei nomi più significativi ai grafici e le immagini... così come hai fatto finora c'è solo un caos immane e da codice non sai nemmeno quale oggetto richiamare.

Ti lascio il file modificato.

TheTruster
 

Allegati

Paolo67

Utente abituale
4 Dicembre 2016
118
18
Montefeltro (PU)
2003
0
Grazie!
Mi hai fornito preziose informazioni!!
In primis ho verificato tutte le icone ed i grafici che figuravano in più e li ho eliminati.
Ho rinominato le 4 icone utili ed adesso funziona perfettamente tutto (grafico compreso)
Adesso ti chiedo come copiare la tua routine nel foglio di calcolo "originale".
Non ho proprio idea di come possa fare questa operazione.


overquote
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
Grazie!
Mi hai fornito preziose informazioni!!
Figurati...

Se hai eliminato tutti gli oggetti ridondanti dal tuo file originale, ti basta copiare-incollare la routine così com'è, dovrebbe funzionare.
Ovviamente stavolta, al posto di Grafico 29, devi usare il nome effettivo del grafico.

TheTruster
 

Paolo67

Utente abituale
4 Dicembre 2016
118
18
Montefeltro (PU)
2003
0
Niente da fare!
Ho visualizzato le varie Shapes,mi escono 2 grafici:
Grafico 31
Grafico 36
Ne cancello uno dei 2
Immetto nel codice l'unico rimasto ma quando lancio la macro scompare... :piango:
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
Niente da fare!
Guarda, il codice l'hai ottenuto ed hai constatato personalmente che funziona... più di questo non credo si possa fare.
Se non puoi postare il file originale, tutto ciò che è stato fatto è il massimo che si può ottenere, per cui, almeno il lavoro di adattamento tocca farlo a te.

TheTruster
 
  • Like
Reactions: rollis13

Paolo67

Utente abituale
4 Dicembre 2016
118
18
Montefeltro (PU)
2003
0
Niente da fare!
Guarda, il codice l'hai ottenuto ed hai constatato personalmente che funziona... più di questo non credo si possa fare.
Se non puoi postare il file originale, tutto ciò che è stato fatto è il massimo che si può ottenere, per cui, almeno il lavoro di adattamento tocca farlo a te.

TheTruster
Ti posto il file originale...
 

Allegati

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
Hai nuovamente sbagliato il nome del grafico. L'unico presente sul foglio era Grafico 31, ma tu usavi Grafico 36!

Inserisci questo codice nella Routine WorkSheet_Change:

Visual Basic:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dgr As String
  If Not Intersect(Target, Range("P37").Precedents) Is Nothing Then
    Dim Sh As Shape
    For Each Sh In ActiveSheet.Shapes
        Sh.Visible = msoTrue
        If Sh.Name <> "Grafico 31" Then
            Sh.Top = 140
            Sh.Left = 130
            Sh.Visible = msoFalse
        End If
    Next
    dgr = [P37].Value
    If dgr = "NEVE" Then
        ActiveSheet.Shapes("Neve").Visible = True
    ElseIf dgr = "PIOGGIA" Then
        ActiveSheet.Shapes("Pioggia").Visible = True
    ElseIf dgr = "GELICIDIO" Then
        ActiveSheet.Shapes("Gelicidio").Visible = True
    ElseIf dgr = "PIOGGIA MISTA A NEVE O NEVE BAGNATA" Then
        ActiveSheet.Shapes("Mista").Visible = True
    End If
End If
End Sub
TheTruster
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
Inserisci questa macro in un modulo e lanciala.

Visual Basic:
Sub MostraShapes()
    Dim Sh As Shape
    For Each Sh In ActiveSheet.Shapes
        Sh.Visible = msoTrue
    Next
End Sub
Con questa dovrebbe essere possibile rendere visibili tutte le Shapes del foglio di lavoro, quindi usando l'altro codice non dovresti avere problemi.

TheTruster
 

rollis13

VBA Expert
Expert
15 Novembre 2015
2.456
115
Cordenons
Office 2016 x32
196
Non ho ancora visto il file originale ma non è che il grafico viene generato da qualche altra macro nuovo ogni volta e pertanto prende sempre un numero diverso ?
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
210
30
Office e VBA
31
OK. Uno lo puoi eliminare. L'altro lo posizioni dove ti serve e fai caso al suo nome, o cambialo con qualcosa di più significativo.
Poi riporta questo nome nell'If...Then della routine Worksheet_Change.

TheTruster
 

Paolo67

Utente abituale
4 Dicembre 2016
118
18
Montefeltro (PU)
2003
0
Ho eliminato il 31 ed è rimasto il 36.Voglio rinominarlo come si fa?Se vado nella casellina in alto a sx non lo prende (diversamente da come avviene invece con le icone...)
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!