Ho un TOT di file .csv con dei dati ordinati sempre allo stesso modo e che occupano sempre lo stesso numero di celle.
I file .csv possono essere di due tipi i quali sono discriminabili dal contenuto della cella D1.
Quello che devo fare io è snellire il processo di creazione del grafico relativo ad ogni file .csv
per fare ciò, ho registrato una macro con le operazioni che devo effettuare prima della creazione del grafico, la creazione del grafico e l'editing del grafico
Da notare che il file csv contiene un unico foglio di lavoro che ha il nome del file stesso.
Ho creato una macro all'interno di personal per renderla utilizzabile sempre in excel e non nei singoli fogli di lavoro
Tutto questo lo faccio senza cliccare su SAVE altrimenti mi restituirebbe un ovvio errore in quanto il foglio non è più un csv.
Non conosco VBA mi arrangio con le risorse che trovo online
Mi da errore di runtime 9: indice non incluso nell'intervallo in questa riga
- Codice: Seleziona tutto
ActiveChart.SetSourceData Source:=Sheets("shtName").Range("A2:B8"), _
PlotBy:=xlColumns
inoltre il grafico non viene creato sul foglio di lavoro attivo, ma viene creato un nuovo foglio di lavoro-grafico
al momento sto testando solo su un file csv nella prima condizione dell'IF.
Questa la mia macro:
- Codice: Seleziona tutto
Sub grafici()
' visto che il nome del mio foglio è sempre diverso creo una variabile che memorizzi il nome del foglio di lavoro
Dim shtName As String
shtName = ActiveSheet.Name
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), TrailingMinusNumbers:= _
True
Columns("A:A").EntireColumn.AutoFit
Range("A2").Select
ActiveCell.FormulaR1C1 = "1"
Range("A3").Select
ActiveCell.FormulaR1C1 = "2"
Range("A4").Select
ActiveCell.FormulaR1C1 = "3"
Range("A5").Select
ActiveCell.FormulaR1C1 = "4"
Range("A6").Select
ActiveCell.FormulaR1C1 = "5"
Range("A7").Select
ActiveCell.FormulaR1C1 = "6"
Range("A8").Select
ActiveCell.FormulaR1C1 = "7"
Range("A9").Select
Windows("altro-foglio.xls").Activate
Selection.Copy
Windows(1).ActivatePrevious
Range("A2:A8").Select
Selection.PasteSpecial paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
:=False, Transpose:=False
' qui verifico il contenuto della cella D1
If Range("D1") = "(Pa)" Then
Range("D2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "100"
Range("D2").Select
Selection.Copy
Range("B2:B8").Select
Selection.PasteSpecial paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
' qui inizia la creazione del grafico
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("shtName").Range("A2:B8"), _
PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:="shtName"
With ActiveChart
.HasTitle = False
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Titolo x"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Titolo y"
End With
With ActiveChart.Axes(xlCategory)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
With ActiveChart.Axes(xlValue)
.HasMajorGridlines = False
.HasMinorGridlines = False
End With
ActiveChart.HasLegend = False
ActiveChart.PlotArea.Select
With Selection.Border
.ColorIndex = 16
.Weight = xlThin
.LineStyle = xlContinuous
End With
Selection.Interior.ColorIndex = xlNone
ActiveChart.SeriesCollection(1).Select
With Selection.Border
.Weight = xlHairline
.LineStyle = xlNone
End With
With Selection
.MarkerBackgroundColorIndex = xlAutomatic
.MarkerForegroundColorIndex = xlAutomatic
.MarkerStyle = xlCircle
.Smooth = False
.MarkerSize = 8
.Shadow = False
End With
Else
[uguale alla parte prima salvo la parte in cui divido per 100]
End If
End Sub
Cosa da l'errore?
Grazie