
Sub Modifica_grafico()
'
' Modifica_grafico Macro
'
' Scelta rapida da tastiera: CTRL+MAIUSC+Z
' ActiveSheet.ChartObjects("Grafico 2").Activate
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=Sheets(Range("A1").Value).Range(Range("B1").Value & ":" & Range("C1").Value), PlotBy _
:=xlColumns
End Sub |
Sub Modifica_grafico()
'
' Modifica_grafico Macro
'
' Scelta rapida da tastiera: CTRL+MAIUSC+Z
' ActiveSheet.ChartObjects("Grafico 2").Activate
ActiveChart.ChartArea.Select
ActiveChart.SetSourceData Source:=Sheets(Range("A1").Value).Range(Range("B20").Value & "," & Range("C20").Value), PlotBy _
:=xlRows
End Sub
|
Option Explicit
Sub CreazioneGrafici()
Dim uRiga As Long, i As Long, k As Long, posO As Double, posV As Double
Dim valoreX As String, valoreY As String, ltr As String, nm As String
Dim wb As Workbook, ws As Worksheet
Dim oChar As Shape, nomichart()
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
Range("D5").Select
'popolo una matrice coi nomi dei grafici presenti
If ws.Shapes.Count > 0 Then
ReDim Preserve nomichart(1 To ws.Shapes.Count)
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "Pompa" Then nomichart(i) = oChar.Name
Next
End If
'individuo l'ultima riga piena
uRiga = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To uRiga Step 23
If IsEmpty(nomichart) Then
For k = 1 To UBound(nomichart) 'scorro i grafici presenti
If Cells(i, 1) & "A" = nomichart(i) Then GoTo 2 'se già presente passo al prossimo
Next k
End If
'altrimenti creo i 4 grafici
'a = a + 1
valoreX = "Foglio1!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio1!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
With oChar.Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
.Legend.Delete
End With
'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
.Width = 260
.Height = 230
End With
nm = ""
Next k
2 Next i
Set oChar = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub
|
Option Explicit
Sub CreazioneGrafici()
Dim uRiga As Long, i As Long, k As Long, posO As Double, posV As Double
Dim valoreX As String, valoreY As String, ltr As String, nm As String
Dim wb As Workbook, ws As Worksheet
Dim oChar As Shape, nomichart(), a As Integer, j As Integer
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
Range("D5").Select
'popolo una matrice coi nomi dei grafici presenti
If ws.Shapes.Count > 0 Then
ReDim Preserve nomichart(1 To ws.Shapes.Count)
a = 1
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "Pompa" Then nomichart(a) = oChar.Name: a = a + 1
Next
End If
'individuo l'ultima riga piena
uRiga = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To uRiga Step 23
If ws.Shapes.Count > 0 Then
For k = 1 To UBound(nomichart) 'scorro i grafici presenti
If Cells(i, 1) & "A" = nomichart(k) Then GoTo 2 'se già presente passo al prossimo
Next k
End If
If Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti crea i 4 grafici
valoreX = "Foglio1!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio1!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
With oChar.Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
.Legend.Delete
End With
'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
.Width = 260
.Height = 230
End With
nm = ""
Next k
2 Next i
Set oChar = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub
Sub AggiungiPompa1A()
Dim oChar As Shape
Dim wb As Workbook, ws As Worksheet
Dim valoreX As String, valoreY As String
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
For Each oChar In ActiveSheet.Shapes
valoreX = "Foglio1!$E$" & 5 & ":$V$" & 5
valoreY = "Foglio2!$E$" & 5 + 1 & ":$V$" & 5 + 1
If oChar.Name = "Pompa 1A" Then
oChar.Chart.SeriesCollection.Add Source:=valoreY
End If
Next
Set wb = Nothing
Set ws = Nothing
End Sub
|
.....
valoreX = "Foglio1!$E$" & i & ":$V$" & i
valoreX2 = "Foglio2!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio1!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
valoreY2 = "Foglio2!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
With oChar.Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
oChar.Chart.SeriesCollection.Add Source:=valoreY2
.Legend.Delete
End With
..... |
Option Explicit
Sub CreazioneGrafici()
Dim uRiga As Long, i As Long, k As Long, posO As Double, posV As Double
Dim valoreX As String, valoreY As String, ltr As String, nm As String
Dim wb As Workbook, ws As Worksheet
Dim oChar As Shape, nomichart(), a As Integer, j As Integer
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
Range("D5").Select
'popolo una matrice coi nomi dei grafici presenti
If ws.Shapes.Count > 0 Then
ReDim Preserve nomichart(1 To ws.Shapes.Count)
a = 1
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "Pompa" Then nomichart(a) = oChar.Name: a = a + 1
Next
End If
'individuo l'ultima riga piena
uRiga = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To uRiga Step 23
If ws.Shapes.Count > 0 Then
For k = 1 To UBound(nomichart) 'scorro i grafici presenti
If Cells(i, 1) & "A" = nomichart(k) Then GoTo 2 'se già presente passo al prossimo
Next k
End If
If Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti crea i 4 grafici
valoreX = "Foglio1!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio1!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
'Stop
With oChar.Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
.Legend.Delete
End With
'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
.Width = 260
.Height = 230
End With
nm = ""
Next k
'controlla se vi sono dati in Foglio2 e, in caso positivo, aggiunge le serie
With Worksheets(2)
If .Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti
For k = 1 To 4
If k = 1 Then ltr = "A"
If k = 2 Then ltr = "B"
If k = 3 Then ltr = "C"
If k = 4 Then ltr = "D"
nm = .Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio2!$E$" & i + k & ":$V$" & i + k
ActiveSheet.ChartObjects(nm).Activate
ActiveChart.SeriesCollection.Add Source:=valoreY
Next k
End With
valoreX = "": valoreY = ""
2 Next i
Set oChar = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub
Sub eliminagrafici()
Dim oChar As Shape
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "Pompa" Then oChar.Delete
Next
End Sub
|
....
With Worksheets(2)
If .Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti
valoreX = "Foglio2!$E$" & i & ":$V$" & i
For k = 1 To 4
If k = 1 Then ltr = "A"
If k = 2 Then ltr = "B"
If k = 3 Then ltr = "C"
If k = 4 Then ltr = "D"
nm = .Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio2!$E$" & i + k & ":$V$" & i + k
ActiveSheet.ChartObjects(nm).Activate
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).Values = valoreY
ActiveChart.SeriesCollection(2).XValues = valoreX
Next k
End With
valoreX = "": valoreY = ""
....... |
Option Explicit
Sub CreazioneGrafici()
Dim uRiga As Long, i As Long, k As Long, posO As Double, posV As Double
Dim valoreX As String, valoreY As String, ltr As String, nm As String
Dim wb As Workbook, ws As Worksheet
Dim oChar As Shape, nomichart(), a As Integer, j As Integer
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
Range("D5").Select
'popolo una matrice coi nomi dei grafici presenti
If ws.Shapes.Count > 0 Then
ReDim Preserve nomichart(1 To ws.Shapes.Count)
a = 1
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "Pompa" Then nomichart(a) = oChar.Name: a = a + 1
Next
End If
'individuo l'ultima riga piena
uRiga = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To uRiga Step 23
If ws.Shapes.Count > 0 Then
For k = 1 To UBound(nomichart) 'scorro i grafici presenti
If Cells(i, 1) & "A" = nomichart(k) Then GoTo 2 'se già presente passo al prossimo
Next k
End If
If Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti crea i 4 grafici
valoreX = "Foglio1!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio1!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
'Stop
With oChar.Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
.Legend.Delete
End With
'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
.Width = 260
.Height = 230
End With
nm = ""
Next k
'controlla se vi sono dati in Foglio2 e, in caso positivo, aggiunge le serie
With Worksheets(2)
If .Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti
valoreX = "Foglio2!$E$" & i & ":$V$" & i
For k = 1 To 4
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = .Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio2!$E$" & i + k & ":$V$" & i + k
ActiveSheet.ChartObjects(nm).Activate
ActiveChart.SeriesCollection.Add Source:=valoreY 'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
End With
nm = ""
Next k
End With
valoreX = "": valoreY = ""
2 Next i
Set oChar = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub |
Option Explicit
Sub CreazioneGrafici()
Dim uRiga As Long, i As Long, k As Long, posO As Double, posV As Double
Dim valoreX As String, valoreY As String, ltr As String, nm As String
Dim wb As Workbook, ws As Worksheet
Dim oChar As Shape, nomichart(), a As Integer, j As Integer
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
Range("D5").Select
'popolo una matrice coi nomi dei grafici presenti
If ws.Shapes.Count > 0 Then
ReDim Preserve nomichart(1 To ws.Shapes.Count)
a = 1
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "Pompa" Then nomichart(a) = oChar.Name: a = a + 1
Next
End If
'individuo l'ultima riga piena
uRiga = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To uRiga Step 23
If ws.Shapes.Count > 0 Then
For k = 1 To UBound(nomichart) 'scorro i grafici presenti
If Cells(i, 1) & "A" = nomichart(k) Then GoTo 2 'se già presente passo al prossimo
Next k
End If
If Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti crea i 4 grafici
valoreX = "Foglio1!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio1!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
'Stop
With oChar.Chart
.ChartType = xlXYScatterSmooth
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
.Legend.Delete
For x = .SeriesCollection.Count To 2 Step -1
.SeriesCollection(2).Delete
Next x
End With
'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
.Width = 260
.Height = 230
End With
nm = ""
Next k
'controlla se vi sono dati in Foglio2 e, in caso positivo, aggiunge le serie
With Worksheets(2)
If .Cells(i, 5) = "" Then GoTo 2 'in mancanza di dati passa oltre senza creare i grafici
'altrimenti
valoreX = "Foglio2!$E$" & i & ":$V$" & i
For k = 1 To 4
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = .Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "Foglio2!$E$" & i + k & ":$V$" & i + k
ActiveSheet.ChartObjects(nm).Activate
ActiveChart.SeriesCollection.Add Source:=valoreY 'posizione
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
End With
nm = ""
Next k
End With
valoreX = "": valoreY = ""
2 Next i
Set oChar = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub |
Sub CreazioneGrafici()
Dim uRiga As Long, i As Long, h As Long, k As Long, posO As Double, posV As Double
Dim valoreX As String, valoreY As String, Yaxes As String, ltr As String, nm As String
Dim wb As Workbook, ws As Worksheet
Dim oChar As Shape, nomichart(), a As Integer, j As Integer
Set wb = ThisWorkbook
Set ws = wb.Worksheets(3)
Range("D5").Select
'popolo una matrice coi nomi dei grafici presenti
If ws.Shapes.Count > 0 Then 'controlla che ci siano figure (ce ne deve essere almeno una per generare la matrice)
ReDim Preserve nomichart(1 To ActiveSheet.Shapes.Count)
a = 1
For Each oChar In ActiveSheet.Shapes
If Left(oChar.Name, 5) = "POMPA" Then nomichart(a) = oChar.Name: a = a + 1 'se la parte sinistra della A5 contiene il nome "POMPA", assegna al grafico un num progressivo
Next
End If
'individuo l'ultima riga piena
uRiga = Cells(Rows.Count, 2).End(xlUp).Row
For i = 5 To uRiga Step 23
If ws.Shapes.Count > 0 Then
For k = 1 To UBound(nomichart) 'scorro i grafici presenti
If Cells(i, 1) & "A" = nomichart(k) Then GoTo 2 'se già presente passo al prossimo
Next k
End If
valoreX = "'Curve output'!$E$" & i & ":$V$" & i
For k = 1 To 4
Set oChar = ws.Shapes.AddChart
If k = 1 Then
ltr = "A"
posO = 30
Yaxes = "m"
End If
If k = 2 Then
ltr = "B"
posO = 305
Yaxes = "kW"
End If
If k = 3 Then
ltr = "C"
posO = 580
Yaxes = "%"
End If
If k = 4 Then
ltr = "D"
posO = 855
Yaxes = "m"
End If
nm = Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "'Curve output'!$E$" & i + k & ":$V$" & i + k
Range("E" & i + k & ":V" & i + k).Select
'Stop
With oChar.Chart
For h = oChar.Chart.SeriesCollection.Count To 1 Step -1 'appena creo il grafico, cancello tutte le serie già presenti, dalla prima fino all'ultima andando a ritroso
.SeriesCollection(h).Delete
Next h
.ChartType = xlXYScatterSmooth
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = valoreX
.SeriesCollection(1).Values = valoreY
.Legend.Delete
End With
oChar.Chart.Axes(xlCategory).HasTitle = True
oChar.Chart.Axes(xlCategory).AxisTitle.Text = "mc/h"
oChar.Chart.Axes(xlValue).HasTitle = True
oChar.Chart.Axes(xlValue).AxisTitle.Text = Yaxes
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
.Width = 260
.Height = 220
End With
nm = ""
Next k
'prende i dati in 'Dati da SAP' e aggiunge le serie anche se non ci sono dati
With Worksheets(1)
valoreX = "'Dati da SAP'!$E$" & i & ":$V$" & i
For k = 1 To 4
If k = 1 Then ltr = "A": posO = 30
If k = 2 Then ltr = "B": posO = 305
If k = 3 Then ltr = "C": posO = 580
If k = 4 Then ltr = "D": posO = 855
nm = .Cells(i, 1) & ltr
oChar.Name = nm
valoreY = "'Dati da SAP'!$E$" & i + k & ":$V$" & i + k
ActiveSheet.ChartObjects(nm).Activate
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).XValues = valoreX
ActiveChart.SeriesCollection(2).Values = valoreY
posV = Cells(i + 5, 2).Top + 10
With ActiveSheet.ChartObjects(nm)
.Left = posO
.Top = posV
End With
nm = ""
Next k
End With
valoreX = "": valoreY = ""
2 Next i
Range("A1").Select 'si posiziona nella cella A1 per comodità
Set oChar = Nothing
Set wb = Nothing
Set ws = Nothing
End Sub |
