2017-09-19 4 views
0

Je veux créer un programme qui:graphique Rechercher avec les données et la couleur de changement de barres à partir des données dans PowerPoint

cycle de
  1. à travers toutes mes diapositives et trouver des diapositives qui contiennent graphique (s), ces cartes sont pas lié à une feuille de calcul. Le graphique doit contenir des données et sera ChartType = xlColumnClustered ou ChartType(51)
  2. Si elle a des données puis regardez les chiffres et changer les couleurs de chaque barre selon le graphique ci-dessous (> = 6.0 puis rouge, < = 8,0 puis bleu, 6,0 < = x> = 8,0 puis violet)

J'ai essayé de chercher à travers chaque expression dans la fenêtre Locals du débogueur pour voir si je pouvais trouver une différence entre un graphique avec des données et un graphique qui n'a pas de données. Je n'ai rien trouvé. Je ne suis pas sûr de savoir comment je serais capable de faire la différence entre une diapositive avec des données et une sans.

Je ne sais pas non plus comment je pourrais accéder aux données du tableau pour appliquer les couleurs.

Toute aide serait appréciée dans la manipulation de ceci.

Merci!

ChartColors

+0

De quel type d'objet s'agit-il? .... est-ce une photo? – jsotola

+0

@jsotola non c'est un graphique régulier. Vous pouvez cliquer droit pour éditer les données, etc. Je ne sais pas comment le définir autrement que 'ChartType = xlColumnClustered' Je pourrais trouver si vous savez ce que je dois rechercher dans les sections locales. – Pinlop

+0

@jsotola Je crois que c'est ChartType (51) – Pinlop

Répondre

1

i enregistré une macro dans Excel de changer les couleurs de bar et pincé il

il est en fait une feuille de calcul dans powerpoint qui alimente les données de chaque carte dans powerpoint

Application.ActivePresentation.Slides(1).Shapes(1).Chart.ChartData.Workbook.activesheet 

vous voulez avoir à lire les données de la feuille de calcul pour décider les couleurs pour les barres, je pense

voici le changement de couleur r

Option Explicit 

Sub Macro1() 

    ' recorded in excel and modified 

    Dim chrt As Chart 
' Set chrt = ActiveSheet.ChartObjects("Chart 1").Chart     ' excel object 
    Set chrt = Application.ActivePresentation.Slides(1).Shapes(1).Chart 

    chrt.ClearToMatchStyle 
    chrt.ChartStyle = 203 
    chrt.ChartStyle = 340 
    chrt.ChartStyle = 333 
    chrt.ChartStyle = 399 

    chrt.ChartType = xlColumnClustered 

    Dim fsc As FullSeriesCollection 
    Set fsc = chrt.FullSeriesCollection 

    With fsc(1).Format.Fill 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(255, 192, 0) 
     .Transparency = 0.5 
     .Solid 
    End With 

    With fsc(1).Format.Line 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(255, 0, 0) 
     .Transparency = 0 
    End With 

    With fsc(2).Format.Fill 
     .Visible = msoTrue 
     .ForeColor.ObjectThemeColor = msoThemeColorAccent1 
     .ForeColor.TintAndShade = 0 
     .ForeColor.Brightness = -0.25 
     .Transparency = 0 
     .Solid 
    End With 

    With fsc(3).Format.Fill 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(146, 208, 80) 
     .Transparency = 0 
     .Solid 
    End With 

    With fsc(3).Format.Line 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(255, 0, 0) 
     .Transparency = 0 
    End With 

    With fsc(1).Points(1).Format.Fill 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(255, 0, 0) 
     .Transparency = 0.6299999952 
     .Solid 
    End With 

    With fsc(1).Points(1).Format.Line 
     .Visible = msoTrue 
     .ForeColor.RGB = RGB(0, 176, 80) 
     .Transparency = 0.0500000119 
     .Weight = 5 
     .Style = msoLineThickBetweenThin 
    End With 

End Sub 
+0

Merci pour ça! J'ai donc fouillé une fois de plus les sections locales et j'ai trouvé les données de ma carte. Les données sont stockées dans deux endroits que j'ai pu trouver: 'shpe.Chart.ChartData.Workbook.ActiveSheet.UsedRange.Value2' et ici' shpe.Chart.ChartData.Workbook.ActiveSheet.UsedRange.CurrentRegion.Worksheet.UsedRange.Value2 'https://imgur.com/a/sqFKp. Je ne sais vraiment pas comment je pourrais travailler avec ceux qui font que mon objectif soit vivant. Savez-vous s'il existe un moyen plus simple de rechercher des sections locales? Si je peux un peu comment chercher une valeur dans les locaux, il peut me conduire à un autre chemin – Pinlop

+0

j'utilise la fenêtre de surveillance, parce que vous pouvez mettre quelque chose comme 'shpe.Chart.ChartData.Workbook.ActiveSheet' là-dedans et alors vous n'avez pas une longue arborescence d'objets à traiter avec .... ce sont des trucs excel, donc vous pouvez utiliser 'shpe.Chart.ChartData.Workbook.ActiveSheet.range (" a1 ")' – jsotola

+0

I comprendre et posté ci-dessous @jsotola. Merci pour votre aide :) – Pinlop

1

This post m'a aidé à comprendre ce que je devais faire, Couplé avec une partie de la logique affichée ici par @jsotola. Ceci est la version PowerPoint de ces deux et fait exactement ce qui était nécessaire dans la question initiale.

Option Explicit 

Public Sub colorGraph() 

    Dim sld As Slide 
    Dim shpe As Shape 
    Dim pres As Object 
    Dim nPoint As Long 
    Dim iPoint As Long 
    Dim c As Chart 
    Dim s As Series 

    Set pres = ActivePresentation 

    For Each sld In pres.Slides 
     For Each shpe In sld.Shapes 

     Set s = shpe.Chart.SeriesCollection(1) 

     If Not shpe.HasChart Then GoTo nxtShpe 
     If Not shpe.Chart.ChartType = xlColumnClustered Then GoTo nxtShpe 
     If s.DataLabels.NumberFormat = "0%" Or s.DataLabels.NumberFormat = "0.0%" Or s.DataLabels.NumberFormat = "0.00%" Then GoTo nxtShpe 

      nPoint = s.Points.Count 

      For iPoint = 1 To nPoint 
       If s.Values(iPoint) >= 8 Then 
        s.Points(iPoint).Interior.Color = RGB(0, 255, 0) 
       ElseIf s.Values(iPoint) < 8 And s.Values(iPoint) >= 2 Then 
        s.Points(iPoint).Interior.Color = RGB(255, 0, 0) 
       ElseIf s.Values(iPoint) < 2 And s.Values(iPoint) > 0 Then 
        s.Points(iPoint).Interior.Color = RGB(0, 0, 255) 
       End If 
      Next iPoint    

nxtShpe: 

     Next shpe 
    Next sld 
End Sub 
+0

vous pouvez raccourcir votre code en ne définissant pas 'c' et en utilisant' Set s = shpe.Chart.SeriesCollection (1) ' – jsotola

+0

@jsotola Merci! J'ai fait le changement. Je l'ai eu là parce que c'est mon code réel: https://pastebin.com/kx0qBC67 Avez-vous des suggestions pour cela? – Pinlop