Trik Mengubah Marker Colors Secara Dinamis Pada Line Chart Using VBA (Bag. II)



(Lanjutan Bagian 2…)

‘Syntax dibawah diawali dengan “With”. Disamping untuk mereduksi syntax yang berulang, juga untuk mempercepat proses running VBA. Semakin singkat syntax, proses running semakin cepat. Begitu menurut para MVP Vba Excel.

With chtChart

.ChartType = xlLine

.ChartStyle = 34

‘Set data source range. Yakni sumber data quantitative (angka, red) yang akan ditampilkan di grafik. Ada 3 series collection i.e .SeriesCollection(1), .SeriesCollection(2), dan .SeriesCollection(3). Series1 berisi data Utilisasi Traffic itu sendiri tanpa mempedulikan besaran niainya apakah berada diatas atau dibawah batas minimal (default warna yang saya set adalah kuning i.e RGB(255, 165, 0) red), Series2 berisi data batas maksimal Traffic i.e 90% sedangkan Series3 berisi data batas minimal Traffic i.e 50%. Keduanya memiliki warna yang sama (merah bergaris dot i.e .RGB = RGB(240, 128, 128))

.SetSourceData Source:=ws.Range(ws.Range("D105"), ws.Range("D105").End(xlToRight).Offset(1)), PlotBy:= _

xlRows

.SeriesCollection(1).XValues = ws.Range("E104", ws.Range("E104").End(xlToRight))

With .SeriesCollection(1)

.MarkerStyle = -4142

.ChartType = xlLineMarkers

.ApplyDataLabels

.DataLabels.Position = xlLabelPositionBelow

.Smooth = True

.MarkerStyle = 8

.MarkerSize = 11

.MarkerBackgroundColor = RGB(255, 165, 0)

.Format.Line.Weight = 1

End With

With .SeriesCollection(2)

.ChartType = xlLine

.Border.LineStyle = xlDot

.Format.Line.Weight = 2

.Format.Line.ForeColor.RGB = RGB(240, 128, 128)

End With

.SeriesCollection.NewSeries

With .SeriesCollection(3)

.Name = "='Source Monthly Traffic'!$D$107"

.Values = ws.Range("E107", ws.Range("D105").End(xlToRight).Offset(2))

.ChartType = xlLine

.Border.LineStyle = xlDot

.Format.Line.Weight = 2

.Format.Line.ForeColor.RGB = RGB(240, 128, 128)

End With

.HasTitle = True

.HasLegend = True

.Legend.Position = xlBottom

.Axes(xlCategory, xlPrimary).HasTitle = False

.Axes(xlValue, xlPrimary).HasTitle = False

.DataTable.ShowLegendKey = True

‘Syntax dibawah berfungsi mengubah judul sesuai pilihan item yang kita butuhkan/inginkan. Misal, di item pilihan saya pilih Branch= Bandung, Sub Branch= Cianjur, dan Cluster= Cianjur. Ketika tombol refresh saya tekan, maka judul grafik akan berubah secara otomatis menjadi “Monthly Traffic Utilization Cianjur”.

.ChartTitle.Characters.Text = "Monthly Traffic Utilization" & " " & Sheets("Display All").Range("C272").Value

.Axes(xlValue).MajorGridlines.Delete

'The Parent property is used to set properties of

'the Chart.

With .Parent

.Top = Range("B275").Top

.Left = Range("B275").Left

.Name = "TrafficMonthly"

.RoundedCorners = True

.Width = 457

.Height = 350

End With

‘Syntax dibawah ini merupakan syntax tambahan yang berfungsi mengubah font dan ukuran huruf sumbu koordinat.

.Axes(xlCategory).TickLabels.AutoScaleFont = False

With .Axes(xlCategory).TickLabels.Font

.Name = "Tahoma"

.FontStyle = "Regular"

.Size = 8

End With

.Axes(xlValue).TickLabels.AutoScaleFont = False

With .Axes(xlValue).TickLabels.Font

.Name = "Tahoma"

.FontStyle = "Regular"

.Size = 8

End With

.Axes(xlValue, xlSecondary).TickLabels.AutoScaleFont = False

With .Axes(xlValue, xlSecondary).TickLabels.Font

.Name = "Tahoma"

.FontStyle = "Regular"

.Size = 8

End With

.ChartTitle.AutoScaleFont = False

With .ChartTitle.Font

.Name = "Tahoma"

.FontStyle = "Bold"

.Size = 11

End With

.ChartArea.Border.Weight = xlMedium

Range("K268").Select

End With

‘Setelah diawal baris ScreenUpdating dan Calculation diset False dan Manual, maka diakhir baris kita ganti menjadi True dan Automatic.

With Application

.ScreenUpdating = True

.Calculation = xlCalculationAutomatic

End With

‘Syntax ini dunakan untuk merelease memory. Tujuannya sama dengan syntax diatasnya, i.e mempercepat proses running VBA

Set chtChart = Nothing

Set oc = Nothing

Set ws = Nothing

End Sub

Jika keseluruhan syntax diatas dijalankan maka grafik yang muncul akan sama persis dengan tampilan grafik pada gambar diatas, hanya saja tidak ada markerstyle atau bulatan berwarna hijau dan merah. Yang ada hanyalah markerstyle atau bulatan berwana kuning (default). Lantas bagaimana mengubah warna markerstyle untuk utilisasi traffic diatas 90% dengan warna hijau dan utilisasi traffic dibawah 50% dengan warna merah secara otomatis?. Inilah inti artikel ini. Berikut syntaxnya:

VBA Syntax to change Markerstyle Color

Sub ChangeColorMarker()

Dim i As Long, sc As Series

‘Karena utilisasi traffic yang warna markerstylenya akan kita ubah terdapat pada Series1, maka Series yang kita set adalah .SeriesCollection(1).

Set sc = ActiveSheet.ChartObjects("TrafficMonthly").Chart.SeriesCollection(1)

With Application

.ScreenUpdating = False

.Calculation = xlCalculationManual

End With

‘Syntax UBound(.XValues) berfungsi menghitung jumlah markerstyle (bulatan) di SeriesCollection(1). Total ada 11 bulatan (sesuai nilai XSeries-nya i.e total bulan dari Jan-11 sampai Nov-11) sehingga UBound(.XValues) = 11.

With sc

For i = 1 To UBound(.XValues)

‘Syntax Application.WorksheetFunction.Index(.Values, i) > 0.9 berfungsi mencari marker value (nilai utilisasi traffic itu sendiri, red) yang nilainya > 90%, jika ditemukan maka warna markerstyle akan berubah secara otomatis menjadi RGB(46, 139, 87). Jika < 50%, maka warnanya akan berubah menjadi RGB(178, 34, 34) dan jika berada diantara keduanya, maka warnanya tidak akan berubah alias tetap.

If Application.WorksheetFunction.Index(.Values, i) > 0.9 Then

sc.Points(i).MarkerBackgroundColor = RGB(46, 139, 87)

ElseIf Application.WorksheetFunction.Index(.Values, i) < 0.5 Then

sc.Points(i).MarkerBackgroundColor = RGB(178, 34, 34)

End If

Next i

End With

With Application

.ScreenUpdating = True

.Calculation = xlCalculationAutomatic

End Tith

Set i = Nothing

Set sc = Nothing

End Sub

Supaya berhasil, maka kedua program diatas i.e Sub ChartUtilisasiTrafficMonthly dan Sub ChangeColorMarker, harus dijalankan bersamaan. Untuk itu syntax berikut harus dimasukkan ke dalam tombol Refresh:

Private Sub CommandButton13_Click()

Call ChartUtilisasiTrafficMonthly

Call ChangeColorMarker

End Sub

Atau bisa juga dengan model lain (i.e mengganti “call” dengan “Run”):

Private Sub CommandButton13_Click()

Run “ChartUtilisasiTrafficMonthly”

Run “ChangeColorMarker”

End Sub

Note: Program diatas tidak akan berjalan jika sourcenya (i.e data quantitative) tidak tersedia dan jika kita tidak menset range/cell-nya dengan tepat. Itu saja, mudah-mudahan bermanfaat.

(Selesai…)



0 Respones to "Trik Mengubah Marker Colors Secara Dinamis Pada Line Chart Using VBA (Bag. II)"

Posting Komentar

 

Entri Populer

Recent Comments

Blog Statistic

Return to top of page Copyright © 2007 | Old Nakula