2017-06-02 1 views
0

Je suis sortie un graphique Excel en powerpoint et j'ai besoin d'ajouter une nouvelle série de données au graphique, j'ai enregistré la macro pour voir comment pour le faire, ce qui nécessite une gamme à une collection de série, mais pas de chance.ajouter de nouvelles séries de données à un objet graphique excel existant dans powerpoint en utilisant vba 2010 - incompatibilité de type

Voici l'exemple de travail complet en utilisant l'accès 2010 vba, dans lequel, à la fin j'essaie d'ajouter une nouvelle série de données:

Option Compare Database 

Public Sub CreateChart() 
Dim myChart As Chart 
Dim gChartData As ChartData 
Dim gWorkBook As Excel.Workbook 
Dim gWorkSheet As Excel.Worksheet 
Dim pptApp As Object 
Dim pptobj As Object 

Set pptApp = CreateObject("Powerpoint.Application") 
Set pptobj = pptApp.Presentation.Add 

pptobj.Slides.Add 1, ppLayoutBlank 

' Create the chart and set a reference to the chart data. 
Set myChart = pptobj.Slides(1).Shapes.AddChart.Chart 
Set gChartData = myChart.ChartData 

' Set the Workbook and Worksheet references. 
Set gWorkBook = gChartData.Workbook 
Set gWorkSheet = gWorkBook.Worksheets(1) 

' Add the data to the workbook. 
gWorkSheet.ListObjects("Table1").Resize gWorkSheet.Range("A1:B5") 
gWorkSheet.Range("Table1[[#Headers],[Series 1]]").Value = "Items" 
gWorkSheet.Range("a2").Value = "Coffee" 
gWorkSheet.Range("a3").Value = "Soda" 
gWorkSheet.Range("a4").Value = "Tea" 
gWorkSheet.Range("a5").Value = "Water" 
gWorkSheet.Range("b2").Value = "1000" 
gWorkSheet.Range("b3").Value = "2500" 
gWorkSheet.Range("b4").Value = "4000" 
gWorkSheet.Range("b5").Value = "3000" 

' Apply styles to the chart. 
With myChart 
    .ChartStyle = 4 
    .ApplyLayout 4 
    .ClearToMatchStyle 
End With 

' Add the axis title. 
With myChart.Axes(xlValue) 
    .HasTitle = True 
    .AxisTitle.Text = "Units" 
End With 

'Add a new data series - TYPE MISMATCH ERROR!!! 
myChart.SeriesCollection.NewSeries 
myChart.SeriesCollection(2).Name = "New_Series" 
myChart.SeriesCollection(2).Values = gWorkSheet.Range("C2:C5") 'Range that is in the worksheet 

'myChart.ApplyDataLabels 

' Clean up the references. 
Set gWorkSheet = Nothing 
' gWorkBook.Application.Quit 
Set gWorkBook = Nothing 
Set gChartData = Nothing 
Set myChart = Nothing 

End Sub 

Cet exemple est le lien suivant: https://msdn.microsoft.com/en-us/library/office/ff973127(v=office.14).aspx

En Pour exécuter ce code, vous devez importer: Visual Basic pour Applications, Bibliothèque d'objets Microsoft Access, OLE Automation, Objet Moteur de base de données d'accès Microsoft Office, Bibliothèque d'objets Microsoft Office, Bibliothèque d'objets Microsoft Powerpoint et Bibliothèque d'objets Microsoft Excel. (La bibliothèque d'objets Powerpoint doit d'abord être importée, puis Microsoft Excel Object Library ou il y a des problèmes de référence)

Avez-vous une idée de l'ajout d'une nouvelle série de données ou de ce qui pourrait ne pas fonctionner avec le code?

Merci beaucoup d'avance.

Répondre

0

Essayez cette façon:

With myChart.SeriesCollection.NewSeries 
    .name = "New_Series" 
    .Values = gWorkSheet.Range("C2:C5").Value2 
End With 

Vous devez d'abord faire référence à la nouvelle série ajoutée et vous ne pouvez pas simplement supposer qu'il aura l'indice 2. Cette méthode est plus sûre.

Ensuite, prenez la propriété .Value de ladite plage, pour obtenir un tableau de valeurs. Cela l'a réparé. La propriété .Value par défaut de l'objet Range est et non garanti pour fonctionner dans toutes les circonstances, c'est-à-dire lorsque le contexte ou le conteneur n'est pas Excel. Il est donc préférable de toujours explicite en référence à la valeur d'une plage.

+1

Merci beaucoup l'homme !!! cela a fonctionné, hier, j'ai essayé d'utiliser gworksheet.Range (..), Value mais ne fonctionnait pas, je ne savais pas que value2 était la clé, merci! – sahilu