Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

macro per muovere e settare Grafico

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

macro per muovere e settare Grafico

Postdi Spartacus85 » 23/07/13 12:41

Ciao a tutti!

Mi sto cervellando con un problema che forse puo essere banale dato che ho poca dimestichezza con le macro.

Ho creato una macro che consente di creare dei grafici partendo da una tabella con numero di righe variabile. Per intenderci 1grafico = 1riga (ovviamente la prima riga della tabella è uguale per tutti i grafici). Questo pezzo della macro funziona, ciò che nn riesco a fare è spostare il grafico uno sotto l'altro (in automatico vengono sovrapposti) e modificare la scala dell'asse X e ridimensionare la larghezza.

Qualcuno può aiutarmi?

Vi posto il pezzo dell macro funzionante

Sub grafico()
'
' Grafico Macro
'

'
Dim x, ChartCount As Integer

n_componenti = Range("a" & Rows.Count).End(xlUp).Row

For x = 24 To n_componenti

Range("B1:G1,B" & x & ":" & "G" & x).Select
Range("B" & x).Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlBarClustered
ActiveChart.SetSourceData Source:=Range( _
"'SEM Graph'!$B$1:$G$1,'SEM Graph'!$B" & x & ":" & "$G" & x)
ActiveChart.ApplyLayout (4)

DA QUI IN POI NON FUNZIONA

'ActiveChart.Name = "grafico"
'ActiveChart.Height = 10
'ActiveSheet.Shapes("Grafico1").Height = 144
'ActiveSheet.Shapes("Grafico n_grafico").IncrementLeft 226.0714173228
'ActiveSheet.Shapes("Grafico n_grafico").IncrementTop 127.5

Next x
End Sub


Grazie per l'aiuto
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Sponsor
 

Re: macro per muovere e settare Grafico

Postdi Anthony47 » 23/07/13 14:26

Ciao Spartacus85, benvenuto nel forum.
Per modificare le dimensioni e la posizione del grafico puoi usare istruzioni derivate da questi esempi:
Codice: Seleziona tutto
With ActiveSheet.ChartObjects("Grafico 2")
    .Width = 400
    .Height = 200
Posizione assoluta:
    .Top = 222
    .Left = 444
'Rispetto a una cella:   
    .Top = Range("G5").Top + 200
    .Left = Range("G5").Left
'Rispetto ad altro grafico:   
    .Top = ActiveSheet.ChartObjects("Grafico 1").Top + 200 + 10 'Ipotesi Graph1 alto 200
    .Left = ActiveSheet.ChartObjects("Grafico 1").Left
End With

Fai sapere se risolvi con questi spunti...
Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per muovere e settare Grafico

Postdi Spartacus85 » 23/07/13 14:32

Grazie Anthony..Grazie mille per il messaggio, semplice e utili le istruzioni che mi hai fornito.

L'unico problema che vedo è che non conosco a priori il nome del grafico (Grafico 2 e Grafico 1 in relatà non li consoco e finirei per applicare le modifiche allàinterno del ciclo for sempre allo stesso grafico 2).

Avrei bisogno di capire come posso gestire questa variabilità nel nome del Grafico.
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Re: macro per muovere e settare Grafico

Postdi Anthony47 » 24/07/13 00:42

Non so se e' compatibile col tuo processo, ma potresti gestire dimensione e posizione gia' durante la creazione dei grafici. Vedi questo codice di test, derivato dal tuo ma con aggiunte le istruzioni marcate **:

Codice: Seleziona tutto
Sub grafico()
'
Dim x, ChartCount As Integer

n_componenti = 5

Dim PosX As Long, PosY As Long      '**
PosX = Range("G5").Left      '**    Esempio con posizione iniziale su G5
PosY = Range("G5").Top       '**

For x = 1 To n_componenti

Range("A3:G7").Select
'Range("B" & x).Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlBarClustered
ActiveChart.Parent.Width = 400      '**
ActiveChart.Parent.Height = 200      '**
ActiveChart.Parent.Top = PosY      '**
ActiveChart.Parent.Left = PosX      '**
PosY = PosY + 200 + 10      '**   Calcola nuova posiz verticale
'ActiveChart.SetSourceData Source:=Range( _
'"'SEM Graph'!$B$1:$G$1,'SEM Graph'!$B" & x & ":" & "$G" & x)
'ActiveChart.ApplyLayout (4)

CCIndex = ActiveChart.Parent.Index      '** Vedi testo

Next x
End Sub

Spero che sia chiaro che cosa fa oguna delle righe e quindi la logica complessiva.
Tieni presente che potrebbe essere piu' comodo indirizzare i grafici col loro Index, invece che col loro nome. Durante la creazione infatti gli indici sono crescenti, quindi letto l' indice del grafico corrente con l' istruzione CCIndex = etc etc sai che il grafico precedente aveva indice pari a CCIndex-1; in questo modo potresti anche usare le istruzioni del mio messaggio di oggi pomeriggio.

Spero ci siano sufficienti spunti e indizi...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13904
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: macro per muovere e settare Grafico

Postdi Spartacus85 » 24/07/13 17:21

Grazie Anthony...sts la prova e ti faccio sapere.
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30

Re: macro per muovere e settare Grafico

Postdi Spartacus85 » 25/07/13 00:53

Perfetto funziona alla grande.

Posto qui il codice completo nel caso fosse di aiuto per qualcun'altro.
Ho solo adattato il codice alla mia situazione con piccole modifiche:

Codice: Seleziona tutto
Sub grafico1()
'
' Grafico Macro
'

'
Dim x, CCIndex As Integer
Dim PosX As Long, PosY As Long      '**

 
PosX = Range("j2").Left + 5    '**
PosY = Range("j2").Top + 2     '**

n_componenti = Range("a" & Rows.Count).End(xlUp).Row
For x = 2 To n_componenti

    Range("c1:i1,c" & x & ":" & "i" & x).Select
    Range("c" & x).Activate
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlBarClustered
    ActiveChart.Parent.Width = 370      '**
    ActiveChart.Parent.Height = 145      '**
    ActiveChart.Parent.Top = PosY      '**
    ActiveChart.Parent.Left = PosX      '**
    PosY = PosY + 145 + 5      '**
        ActiveChart.SetSourceData Source:=Range( _
        "$c$1:$i$1,$c" & x & ":" & "$i" & x)
        ActiveChart.ApplyLayout (4)
           
    Next x
   
End Sub


Volendo all'inizio del foglio potete aggiungere un comando per cancellare tutti i grafici

Codice: Seleziona tutto
ActiveSheet.ChartObjects.Delete

Grazie mille Anthony
Spartacus85
Utente Junior
 
Post: 50
Iscritto il: 23/07/13 12:30


Torna a Applicazioni Office Windows


Topic correlati a "macro per muovere e settare Grafico":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti