2012-12-12 80 views
5

Tôi có một số biểu đồ trong đó Giá trị X là văn bản và Giá trị Y là số. Tôi muốn tô màu từng thanh màu đỏ nếu giá trị Y cho thanh nhỏ hơn 0, Xanh lục nếu lớn hơn hoặc bằng không. Ngoài ra, nếu giá trị X của thanh là "NET THAY ĐỔI", tôi cần thanh màu vàng. Tôi đã làm theo các hướng dẫn trong luồng StackOverflow trước đây tại đây: Changing Bar colors using VBA based on category label.excel vba thay đổi màu biểu đồ thanh cho một điểm dữ liệu dựa trên giá trị điểm

Tôi nhận được lỗi Thời gian chạy 451 Quy trình cho phép thuộc tính không được xác định và quy trình nhận thuộc tính không trả lại đối tượng.

Mã của tôi là dưới đây:

For chartIterator = 1 To ActiveSheet.ChartObjects.count 

    For pointIterator = 1 To ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points.count 
     If ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Values(pointIterator) >= 0 Then 
      ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(146, 208, 80) 
     Else 
      ActiveWorkbook.Sheets("Due To Chart").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(255, 0, 0) 
     End If 
    Next pointIterator 

Next chartIterator 

Các lỗi đi lên ở câu lệnh IF. Tôi cũng đã cố gắng. Điểm (pointIterator) .Giá trị, mà đã cho tôi một "tài sản hoặc phương pháp không được xác định cho đối tượng này" lỗi.

Bất kỳ suy nghĩ nào về những gì tôi đang làm sai?

Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

6

Bạn đang gặp sự cố khi sử dụng SeriesCollection (1) .Giá trị mà bạn đang xử lý dưới dạng mảng mà bạn có thể lặp lại. Thay vào đó, đây là một hàm trả về các giá trị của các điểm trong SeriesCollection.

Điều cần thiết là gán kết quả của hàm cho biến mảng, sau đó lặp qua mảng để kiểm tra xem các giá trị trong mảng có lớn hơn hoặc nhỏ hơn 0 hay không. Sau đó, bạn có thể gán màu cho các điểm biểu đồ.

Mã này nên làm như lừa:

Sub color_chart() 

    Dim chartIterator As Integer, pointIterator As Integer, _ 
     seriesArray() As Variant 

    For chartIterator = 1 To ActiveSheet.ChartObjects.Count 
     seriesArray = ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
         chart.SeriesCollection(1).Values 

     For pointIterator = 1 To UBound(seriesArray)    

      If seriesArray(pointIterator) >= 0 Then 
       ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
       chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(146, 208, 80) 
      Else 
       ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _ 
       chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _ 
       RGB(255, 0, 0) 
      End If 

     Next pointIterator 

    Next chartIterator 

    End Sub 
+0

Điều này làm việc hoàn hảo! – user1899231

1

Đây là một sự thay thế mà không yêu cầu VBA, và các công trình tự động như công thức cập nhật. Hãy xem ví dụ "Biểu đồ thanh có định dạng có điều kiện" trong hướng dẫn này:

+0

Tôi đã không kiểm tra này ra ban đầu, nhưng điều này thực sự là rất mát mẻ. Cảm ơn! – user1899231

Các vấn đề liên quan