(min Excel 2010) Pozycja Excel.Point na wykresie oraz własciwości PlotArea.Inside*** Wykresu   strona główna:
A po co ten Excel ;-)
 
 
 
Mamy takie dane --->>>  
wierszy jest więcej a etapów (kolejno numerowanych) 6.  
Chcielibyśmy wizualnie oddzielić poszczególne epaty od siebie tak żeby  
widać był w którym miejscy zaczyna się kolejny etap.  
Na załączonym screen'ie zaznaczyłem miejsce w którym zaczyna się etap:2  
Co zrobic żeby oddzielić od siebie etapy?? Można w ich zakresie wstawić  
kolor "tła" naprzemiennie dla kolejnych etapów. I o tym będzie dzisiejszy temat.  
 
Pomysł polega na wstawieniu na wykres kształtów o takich wymiarach żeby  
rozdzielić od siebie kolejne etapy.  
 
Zadanie realizuje procedura:  
 
 
Option Explicit  
 
Sub Start()  
    Dim xlWks As Excel.Worksheet  
    Dim xlChr As Excel.Chart  
    Dim tblEt, i As Long  
    Dim etap As Long, iStart As Long  
    Dim xlPoint1 As Excel.Point  
    Dim xlPoint2 As Excel.Point  
    Dim objShp As Excel.Shape  
 
    Set xlWks = ThisWorkbook.Worksheets("sheet1")  
    With xlWks  
        tblEt = .Range("G2:G244")  
        Set xlChr = .ChartObjects("Chart 1").Chart  
    End With  
      
    For Each objShp In xlChr.Shapes  
        objShp.Delete  
    Next  
      
    With xlChr.SeriesCollection(1)  
        iStart = 1: Set xlPoint1 = .Points(1)  
          
        For etap = 1 To 6  
            Do  
                i = i + 1  
                If i = UBound(tblEt) Then Exit Do  
            Loop While tblEt(i, 1) = etap  
            Set xlPoint2 = .Points(i)  
              
            Set objShp = xlChr.Shapes.AddShape(msoShapeRectangle, _   Shapes.AddShape Method (Excel)
.AddShape(Type, Left, Top, Width, Height)
                                               xlPoint1.Left, _  
                                               xlChr.PlotArea.InsideTop, _  
                                               xlPoint2.Left - xlPoint1.Left, _  
                                               xlChr.PlotArea.InsideHeight)  
            With objShp  
                .Fill.ForeColor.RGB = IIf((etap Mod 2 = 0), VBA.RGB(180, 180, 180), _  
                                                            VBA.RGB(220, 220, 220))  
                .Fill.Transparency = 0.6  
                .Line.Visible = msoFalse  
            End With  
            Set objShp = Nothing  
            iStart = i: Set xlPoint1 = .Points(i)  
        Next
 
    End With  
      
    Set objShp = Nothing  
    Set xlPoint1 = Nothing   Tu fajny przykład zielonego
    Set xlPoint2 = Nothing   na realizację zadania
    Set xlChr = Nothing   bez VBA :-) (szacun!)
    Set xlWks = Nothing   www.excelforum.pl
 
End Sub  
 
Efekt..  
 
 
 
 
 
 
 
  przykład do pobrania
  chr02.zip