2010-12-14 89 views
0

Je crée un affichage ProcessBook qui remplit un objet Microsoft Office 11.0 Spreadsheet incorporé (Office 2003) avec un ensemble d'entrées. Je calcule ensuite des données agrégées à leur sujet; ces données agrégées ne doivent pas être visibles sous forme de feuille de calcul à l'écran, mais doivent être utilisées pour générer un graphique à barres. Les données sont actuellement utilisées pour remplir un objet de feuille de calcul Microsoft Office 11.0 distinct. Il est organisé de telle sorte que le titre de chaque graphique à barres se trouve dans la colonne A et la valeur correspondante dans la colonne B.Comment est-ce que je peux modifier par programme un graphique de barre/colonne incorporé avec VBA?

Puisqu'il s'agit de ProcessBook, j'ai même eu de la difficulté à accéder aux objets incorporés, mais j'ai réussi pour incorporer et accéder à un objet ChartSpace, ainsi qu'un objet enfant ChChart. Malheureusement, je n'arrive pas à comprendre comment définir manuellement les valeurs des barres ou comment utiliser les méthodes .SetData ou .SetSpreadsheetData pour pointer vers un objet que j'ai rempli.

Accès à l'objet ChartSpace est assez simple: ThisDisplay.ChartSpace1
je peux alors ajouter un graphique et un accès assez facilement:
Dim objChart as ChChart
Set objChart = ThisDisplay.ChartSpace1.Charts.Add(0)

Je peux accéder à peu mes valeurs de feuille de calcul facilement ainsi:
strBarName = ThisDisplay.sstChartData.Range("A2").Value
intBarVal = ThisDisplay.sstChartData.Range("B2").Value

Comment définir la source de données ou définir manuellement les valeurs des barres dans l'objet ChChart? Sinon, comment utiliser un objet différent pour atteindre le même objectif?

Répondre

0

Apparemment, la persistance est la clé ici. J'ai réussi à déterminer comment ajouter manuellement des valeurs et comment faire référence à l'objet feuille de calcul existant. Les deux exemples s'inspirent largement de la documentation en ligne de ChChart; Je suppose que j'étais juste fatigué quand je l'ai essayé en premier lieu et que j'ai dû faire quelque chose de mal quelque part.

Public Sub AddValuesToChartManually() 
Dim objChart As ChChart 
With ThisDisplay.ChartSpace1 
    Do While .Charts.Count > 0 
     ThisDisplay.ChartSpace1.Charts.Delete (0) 
    Loop 

    Set objChart = .Charts.Add 
    objChart.HasTitle = True 
    objChart.Title.Caption = "Chart Title" 
    objChart.Axes.Item(0).HasTitle = True 
    objChart.Axes.Item(1).HasTitle = True 
    objChart.Axes.Item(0).Title.Caption = "Axis 0" 
    objChart.Axes.Item(1).Title.Caption = "Axis 1" 
    objChart.HasLegend = False   

    Dim astrHeaders(0 To 4) As String 
    Dim aintValues1(0 To 4) As String 
    Dim aintValues2(0 To 4) As String 
    Dim astrSeries1(0) As String 
    Dim astrSeries2(0) As String 

    astrHeaders(0) = "AL1" 
    astrHeaders(1) = "AL2" 
    astrHeaders(2) = "AL3" 
    astrHeaders(3) = "AL4" 
    astrHeaders(4) = "AL5" 

    astrSeries(0) = "Series Name" 

    aintValues(0) = 1 
    aintValues(1) = 3 
    aintValues(2) = 17 
    aintValues(3) = 1 
    aintValues(4) = 7 

    objChart.Type = .Constants.chChartTypeColumnClustered 

    Call objChart.SetData(chDimSeriesName, .Constants.chDataLiteral, astrSeries) 
    Call objChart.SetData(chDimCategories, .Constants.chDataLiteral, astrHeaders) 
    Call objChart.SeriesCollection(0).SetData(.Constants.chDimValues, .Constants.chDataLiteral, aintValues) 

End With 
End Sub 


Public Sub AddValuesFromSpreadsheet() 
Dim objChart1 As ChChart 

With ThisDisplay.ChartSpace1 
    Do While .Charts.Count > 0 
     ThisDisplay.ChartSpace1.Charts.Delete (0) 
    Loop 

    Set .DataSource = ThisDisplay.sstChartData 

    Set objChart1 = .Charts.Add 
    ' Set the chart type. 
    objChart1.Type = .Constants.chChartTypeColumnClustered 

    ' Display titles 
    objChart1.HasTitle = True 
    objChart1.Title.Caption = "Chart Title" 

    ' Bind the series name to cell B1 in the first sheet of the spreadsheet 
    objChart1.SetData chDimSeriesNames, .Constants.chDataBound, "B1" 

    ' Bind the category axis to cell A2:A28 in the first sheet of the spreadsheet. 
    objChart1.SetData chDimCategories, .Constants.chDataBound, "A2:A6" 

    ' Bind the values of the data series to cells B2:B28 in the first sheet of the spreadsheet. 
    objChart1.SeriesCollection(0).SetData chDimValues, .Constants.chDataBound, "B2:B6" 

End With 
End Sub