Risolto msgbox tra la creazione di un grafico e l'altro

ezio68

Utente abituale
Original poster
12 Marzo 2023
536
17
18
57
Siracusa
2021
buongiorno, con il seguente codice :
Visual Basic:
Private Sub CommandButton1_Click()
   
    Dim newgrafico01 As ChartObject
    Dim newgrafico02 As ChartObject
    Dim newgrafico03 As ChartObject
    Dim intervallo As Range
    Dim nome As String
   
    ''---------------------------------------------------------------------------------------
   
    MsgBox ("CREO IL PRIMO GRAFICO")
   
    Set intervallo = Range("a1:b4")
   
    Set newgrafico01 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=10, Top:=80)
    newgrafico01.Chart.SetSourceData Source:=intervallo
    newgrafico01.Chart.ChartType = xlColumnClustered
    newgrafico01.Name = "miografico01"
   
    ''---------------------------------------------------------------------------------------
   
    MsgBox ("CREO IL SECONDO GRAFICO")
   
    Set intervallo = Range("c1:d4")
   
    Set newgrafico02 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=432, Top:=80)
    newgrafico02.Chart.SetSourceData Source:=intervallo
    newgrafico02.Chart.ChartType = xlColumnClustered
    newgrafico02.Name = "miografico02"
   
    ''---------------------------------------------------------------------------------------
   
    MsgBox ("CREO IL TERZO GRAFICO")
   
    Set intervallo = Range("E1:F4")
   
    Set newgrafico03 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=432, Top:=300)
    newgrafico03.Chart.SetSourceData Source:=intervallo
    newgrafico03.Chart.ChartType = xlColumnClustered
    newgrafico03.Name = "miografico03"

End Sub

che funziona e non da alcun tipo di errore, creo tre grafici ; tra la creazione di un grafico e l'altro ho inserito un msgbox . Lo scopo è quello di :
- visualizzare il messaggio
- creare il grafico
tutto questo ripetuto per tre volte. Però succede che quando eseguo la sub , prima visualizzo i tre msgbox uno dietro l'altro, e successivamente si creano in una sola volta i tre grafici. Non so se è giusto così, ma esiste un modo per :

- prima visualizzare il messaggio
- e dopo creare il grafico ?

grazie .
 

TheTruster

Utente abituale
Expert
19 Gennaio 2021
849
400
95
thetruster.altervista.org
LTSC 2024
Ciao Ignazio,
E' probabile che la la creazione del grafico venga effettuata in modo "asincrono" rispetto all'esecuzione del codice, che una volta dato il comando di creazione prosegue oltre.

Prova magari a mettere un DoEvents dopo la creazione del Grafico e prima di lanciare il secondo MsgBox oppure magari, con la stessa modalità, forzare la visibilità del grafico con newgrafico01.Visible = True, poi MsgBox, etc...
Ma ovviamente è solo una supposizione, visto che non ho modo di provare.

TheTruster
 

Marius44

VBA Expert
Staff
9 Settembre 2015
9.981
1.202
245
82
Catania
Excel2019
Ciao
Il problema è dovuto alla velocità di esecuzione.
Aggiungi, prima del messaggio, queste due righe di codice:

Visual Basic:
....
newgrafico01.Activate
Application.Wait (Now + 0.000001) ' attesa mezzo secondo
....
Ovviamente ambiando il nome del grafico al secondo passaggio. Non serve per il terzo grafico. Aggiungerei anche la selezioe ad una cella per evitare che il codice rimanda "appeso".
Ciao,
Mario
 

ezio68

Utente abituale
Original poster
12 Marzo 2023
536
17
18
57
Siracusa
2021
Il problema è dovuto alla velocità di esecuzione.
Aggiungi, prima del messaggio, queste due righe di codice:
grazie Mario, risolto alla grande !
Visual Basic:
Private Sub CommandButton1_Click()
  
    Dim newgrafico01 As ChartObject
    Dim newgrafico02 As ChartObject
    Dim newgrafico03 As ChartObject
    Dim intervallo As Range
    Dim nome As String
  
    Rem ---------------------------------------------------------------------------------------
  
    MsgBox ("CREO IL PRIMO GRAFICO")
  
    Set intervallo = Range("a1:b4")
  
    Set newgrafico01 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=10, Top:=80)
    newgrafico01.Chart.SetSourceData Source:=intervallo
    newgrafico01.Chart.ChartType = xlColumnClustered
    newgrafico01.Name = "miografico01"
    Application.Wait (Now + 0.000001) ' attesa mezzo secondo
    newgrafico01.Activate
    Rem ---------------------------------------------------------------------------------------
 
    MsgBox ("CREO IL SECONDO GRAFICO")
  
    Set intervallo = Range("c1:d4")
  
    Set newgrafico02 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=432, Top:=80)
    newgrafico02.Chart.SetSourceData Source:=intervallo
    newgrafico02.Chart.ChartType = xlColumnClustered
    newgrafico02.Name = "miografico02"
    Application.Wait (Now + 0.000001) ' attesa mezzo secondo
    newgrafico02.Activate
  
    Rem ---------------------------------------------------------------------------------------
    Application.Wait (Now + 0.000001) ' attesa mezzo secondo
    MsgBox ("CREO IL TERZO GRAFICO")
  
    Set intervallo = Range("E1:F4")
  
    Set newgrafico03 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=432, Top:=300)
    newgrafico03.Chart.SetSourceData Source:=intervallo
    newgrafico03.Chart.ChartType = xlColumnClustered
    newgrafico03.Name = "miografico03"
  
End Sub
ovviamente non ho messo le tue righe all'ultimo perché è (appunto) l'ultimo grafico . TheTruster @TheTruster salve, non avevo visto il tuo messaggio. . . appena provo ti faccio sapere , Grazie. . . . detto fatto , ecco il codice :
Visual Basic:
Private Sub CommandButton5_Click()
    
    Dim newgrafico01 As ChartObject
    Dim newgrafico02 As ChartObject
    Dim newgrafico03 As ChartObject
    Dim intervallo As Range
    Dim nome As String
    
    Rem ---------------------------------------------------------------------------------------
    
    MsgBox ("CREO IL PRIMO GRAFICO")
    
    Set intervallo = Range("a1:b4")
    
    Set newgrafico01 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=10, Top:=80)
    newgrafico01.Chart.SetSourceData Source:=intervallo
    newgrafico01.Chart.ChartType = xlColumnClustered
    newgrafico01.Name = "miografico01"
    
    DoEvents
    newgrafico01.Visible = True
    Rem ---------------------------------------------------------------------------------------
  
    MsgBox ("CREO IL SECONDO GRAFICO")
    
    Set intervallo = Range("c1:d4")
    
    Set newgrafico02 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=432, Top:=80)
    newgrafico02.Chart.SetSourceData Source:=intervallo
    newgrafico02.Chart.ChartType = xlColumnClustered
    newgrafico02.Name = "miografico02"
    
    DoEvents
    newgrafico02.Visible = True
    Rem ---------------------------------------------------------------------------------------
    
    MsgBox ("CREO IL TERZO GRAFICO")
    
    Set intervallo = Range("E1:F4")
    
    Set newgrafico03 = ActiveSheet.ChartObjects.Add(Width:=400, Height:=200, Left:=432, Top:=300)
    newgrafico03.Chart.SetSourceData Source:=intervallo
    newgrafico03.Chart.ChartType = xlColumnClustered
    newgrafico03.Name = "miografico03"

End Sub
non so se ho interpretato alla lettera quello che mi hai suggerito, ma non va.
 
Ultima modifica: