Avatar billede maffigadaffi Novice
20. marts 2015 - 12:23 Der er 1 løsning

VBA: Betinget formatering på alle diagrammer på ActiveSheet

Jeg har en procedure der laver betinget formatering på et markeret søjlediagram.

Jeg ønsker at tilpasse proceduren så den looper igennem alle Charts på ActiveSheet og laver betinget formatering.

Her er min nuværende kode:

Sub BetingetFormateringDiagram()

  Dim rPatterns As Range
  Dim iPattern As Long
  Dim vPatterns As Variant
  Dim iPoint As Long
  Dim vValues As Variant
  Dim rValue As Range
           
      On Error GoTo ErrHandler
     
            Set rPatterns = ActiveSheet.Range("A1:A4")
                vPatterns = rPatterns.Value
            With ActiveChart.SeriesCollection(1)
                vValues = .Values
               
              For iPoint = 1 To UBound(vValues)
                For iPattern = 1 To UBound(vPatterns)
                  If vValues(iPoint) <= 0 Then
                    .Points(iPoint).Format.Fill.ForeColor.RGB = RGB(185, 59, 0)
                    .Points(iPoint).Format.Fill.BackColor.RGB = RGB(255, 0, 0)
                    .Points(iPoint).Format.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=2
                  Else
                    .Points(iPoint).Format.Fill.ForeColor.RGB = RGB(33, 166, 30)
                    .Points(iPoint).Format.Fill.BackColor.RGB = RGB(0, 255, 0)
                    .Points(iPoint).Format.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=1
                  End If
                Next
              Next
            End With
    Exit Sub
   
ErrHandler:
   
    MsgBox ("Du skal markere et diagram først"), vbCritical

End Sub
Avatar billede maffigadaffi Novice
20. marts 2015 - 13:52 #1
Jeg fandt selv en løsning:

Sub BetingetFormateringDiagram()

    Dim rPatterns As Range
    Dim iPattern As Long
    Dim vPatterns As Variant
    Dim iPoint As Long
    Dim vValues As Variant
    Dim rValue As Range
    Dim sht As Worksheet
    Dim CurrentSheet As Worksheet
    Dim cht As ChartObject
   
        Application.ScreenUpdating = False
        Application.EnableEvents = False
       
        Set CurrentSheet = ActiveSheet
       
          For Each cht In ActiveSheet.ChartObjects
            cht.Activate
                Set rPatterns = ActiveSheet.Range("A1:A4")
                    vPatterns = rPatterns.Value
                With ActiveChart.SeriesCollection(1)
                    vValues = .Values
                   
                  For iPoint = 1 To UBound(vValues)
                    For iPattern = 1 To UBound(vPatterns)
                      If vValues(iPoint) <= 0 Then
                        .Points(iPoint).Format.Fill.ForeColor.RGB = RGB(185, 59, 0)
                        .Points(iPoint).Format.Fill.BackColor.RGB = RGB(255, 0, 0)
                        .Points(iPoint).Format.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=2
                      Else
                        .Points(iPoint).Format.Fill.ForeColor.RGB = RGB(33, 166, 30)
                        .Points(iPoint).Format.Fill.BackColor.RGB = RGB(0, 255, 0)
                        .Points(iPoint).Format.Fill.TwoColorGradient Style:=msoGradientHorizontal, Variant:=1
                      End If
                    Next
                  Next
                End With
          Next cht
       
        Application.EnableEvents = True

End Sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester