Cách sử dụng VBA Excel 2010 để đặt màu dòng sê-ri, tô màu đánh dấu và màu vạch đánh dấu


3

Tôi đang cố gắng viết chương trình con VBA Excel 2010 để định dạng biểu đồ theo tiêu chuẩn được xác định trước (nghĩa là do tôi xác định). Các thuộc tính cụ thể mà tôi muốn có thể đặt chỉ là các thuộc tính có sẵn thông qua cửa sổ Định dạng chuỗi dữ liệu mở ra khi nhấp đúp vào chuỗi dữ liệu.

Trong nỗ lực khám phá tên của các thuộc tính khác nhau mà tôi sẽ cần đặt, tôi đã ghi lại dưới dạng macro các thay đổi mà tôi đang thực hiện theo kiểu của chuỗi dữ liệu. Tuy nhiên, mặc dù tôi có thể đặt Màu đường kẻ và Màu đường kẻ đánh dấu thành các màu khác nhau thông qua cửa sổ Định dạng chuỗi dữ liệu, macro được ghi (chú thích bên dưới) đề cập đến các đối tượng có tên giống hệt nhau (không thể phân biệt) cho Màu đường kẻ và Màu đường kẻ đánh dấu.

Ngoài ra, khi tôi thực sự chạy macro, có hai vấn đề. Đầu tiên, mặc dù thực tế rằng macro được ghi lại đề cập đến thuộc tính đánh dấu .ForeColor.Brightness, dòng đó tạo ra lỗi khi các macro được thực thi. Lỗi cho biết Độ sáng Phương thức của đối tượng ColorFormat không thành công ". Thứ hai, mã được ghi thực sự đồng thời đặt màu của vạch đánh dấu và dòng chính cho chuỗi, vì vậy, trong mã được ghi, cả hai đều được đặt đầu tiên theo thứ tôi hy vọng sẽ là Dấu Màu đường và sau đó cả hai được đặt thành màu tôi muốn cho Màu đường chính.

Làm cách nào để tôi đặt Điểm đánh dấu, Màu đường kẻ đánh dấu và Màu đường kẻ.

Sub Macro1()
'
' Macro6 Macro
' On Sheet 1 there is a single embedded chrt 
  ActiveSheet.ChartObjects("Chart 1").Activate
  ActiveChart.SeriesCollection(1).Select
  With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorText1
    .ForeColor.TintAndShade = 0
'    The following (recorded line produces an error)
    .ForeColor.Brightness = 0.5
    .Transparency = 0
    .Solid
  End With
  With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent5
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = 0.400000006
    .Transparency = 0
  End With
  With Selection.Format.Line
    .Visible = msoTrue
    .ForeColor.ObjectThemeColor = msoThemeColorAccent6
    .ForeColor.TintAndShade = 0
    .ForeColor.Brightness = -0.5
    .Transparency = 0
  End With
End Sub

Hai cuối cùng của bạn with đang giải quyết cùng một đối tượng
Raystafarian

@Raystafarian, tôi không nghĩ bạn đọc câu hỏi. Tôi biết rằng họ giải quyết cùng một đối tượng. Đó là toàn bộ câu hỏi của tôi! Tại sao việc ghi macro các sự kiện thay đổi hai đối tượng khác nhau tạo ra một macro xuất hiện để tham chiếu cùng một đối tượng hai lần? Và những đối tượng nào nên được tham chiếu trong macro để thực hiện các thay đổi mà tôi đã thực hiện thủ công?
user02814

Tôi đã đấu tranh với điều này. Có những lỗ hổng trong cách VBA xử lý định dạng của các thành phần biểu đồ, khi Office 2007 được tung ra thị trường. Những thiếu sót chưa bao giờ được sửa chữa, ngoại trừ những hỏng hóc .TintAndShade bị bỏ lại để tương thích nhưng được thay thế vào năm 2010 bởi .Brightness cho chức năng.
Jon Peltier

Câu trả lời:


4

Có vẻ như các tùy chọn định dạng này được triển khai hơi khó xử trong Excel 2010 và 2013:

  1. Màu sắc và thuộc tính của dòng được đặt là mã macro đã ghi lại chúng, sử dụng Series.Format đối tượng và con của nó ( Fill, Glow, Shadow, v.v ... [1]).
  2. Đánh dấu màu tô cho tất cả các các điểm đánh dấu trong chuỗi được thiết lập với Series.MarkerBackgroundColor hoặc là Series.MarkerBackgroundColorIndex. Tương tự, màu đường đánh dấu cho tất cả các các điểm đánh dấu trong chuỗi được thiết lập với Series.MarkerForegroundColor hoặc là Series.MarkerForegroundColorIndex. [2]
  3. Ngoài ra, màu đánh dấu điền và màu có thể được đặt cá nhân thông qua Series.Points(n).Format.FillSeries.Points(n).Format.Line các đối tượng. Tuy nhiên , ít nhất là trong Excel 2013, thay đổi Series.Points(n).Format.Line.ForeColor cũng thế thay đổi màu của đoạn đường ngay trước điểm dữ liệu liên quan.

Các thuộc tính của # 2 trông giống như các khoản giữ từ DOM DOM trước đó, mặc dù có chức năng mở rộng về mặt .MarkerForegroundColor.MarkerBackGroundColor chấp nhận bất kỳ giá trị RGB nào. Những người trong số 3 phù hợp với mức cấu hình mới được tìm thấy trong Excel 2010 và mới hơn, nhưng chúng có vẻ có lỗi. Một khía cạnh khó chịu của sự nhàm chán là dường như các màu của vạch đánh dấu được đan xen một cách có vấn đề với màu của dòng sê-ri - theo như tôi có thể nói, không thể thay đổi màu của dòng mà không ảnh hưởng đến màu của vạch ngược lại Cụ thể, có vẻ như không thể đạt được màu dòng sê-ri đồng nhất trong khi cũng áp dụng các biến thể theo từng điểm trong màu vạch đánh dấu bằng VBA. (Một lần nữa, tôi đang thử nghiệm ở đây trong Excel 2013; 2010 có thể hoạt động khác đi.)

Trong mọi trường hợp, trong trường hợp không cần điều chỉnh màu theo từng điểm, chức năng của trình trợ giúp như sau có thể hữu ích để thực hiện thay đổi màu đường mà không ảnh hưởng đến màu tô hoặc vạch màu dưới dạng giá trị RGB dài [3]):

Sub ChangeLineColorOnly(srs as Series, newLineColor as Long)
    Dim oldMkrFill as Long, oldMkrLine as Long

    ' Store old marker colors
    oldMkrFill = srs.MarkerBackgroundColor
    oldMkrLine = srs.MarkerForegroundColor

    ' Set the series ForeColor
    srs.Format.Fill.ForeColor.RGB = newLineColor

    ' Restore the old marker colors
    srs.MarkerBackgroundColor = oldMkrFill
    srs.MarkerForegroundColor = oldMkrLine

End Sub

Một phiên bản thay thế của chức năng trình trợ giúp ở trên có thể dễ dàng được viết để chứa các màu được chỉ định là SchemeColor [4] hoặc chỉ lưu trữ màu của vạch đánh dấu, v.v.

Đối với .ForeColor.Brightness trục trặc, có lẽ là kết quả của việc mã hóa lại bất cẩn chức năng 'Record Macro' trong việc phát triển bản phát hành Excel 2010. Có lẽ chỉ nên chèn vào mã VBA đã ghi cho một số loại biểu đồ nhất định trong đó .Brightness là một thuộc tính hợp lệ được sửa đổi.

[1] http://msdn.microsoft.com/en-us/l Library / office / ff839279 (v = office.14) .aspx
[2] http://msdn.microsoft.com/en-us/l Library / office / ff840677 (v = office.14) .aspx
[3] http://msdn.microsoft.com/en-us/l Library / zc1dyw8b% 28v = vs.90% 29.aspx
[4] http://msdn.microsoft.com/en-us/l Library / office / ff836764 (v = office.14) .aspx


Tất nhiên, .Brightness là một thuộc tính hợp lệ được sửa đổi thủ công thông qua giao diện người dùng Excel; nó chỉ phá vỡ trong VBA.
Jon Peltier

@JonPeltier Đã mãi mãi kể từ khi tôi viết bài này, nhưng IIRC một số loại biểu đồ không hỗ trợ .Brightness và do đó nó trở thành một tài liệu tham khảo không xác định trong những trường hợp đó; do đó, lỗi thuộc tính (hoặc bất cứ thứ gì) do VBA ném trong tình huống của OP.
hBy2Py

Tôi không nghĩ đó là loại biểu đồ nhiều như các yếu tố nhất định. Tôi chỉ thấy .Brightness ném lỗi khi bạn cố gắng điều chỉnh .Brightness màu tô (nền) của điểm đánh dấu (tốt, vâng, chỉ một số loại biểu đồ nhất định có điểm đánh dấu, nhưng đó là tất cả các điểm đánh dấu và không có gì khác). Nó ghi tốt, thất bại khi chơi lại. Lưu ý đến bản thân: Hãy thử .TintAndShade.
Jon Peltier

@JonPeltier Cũng có thể. Tôi đã không làm một cuộc điều tra nghiêm ngặt về những gì đã thổi bùng lên VBA và những gì hoạt động tốt.
hBy2Py

Vâng, .TintAndShade không có tác dụng. Vì vậy, chúng tôi không thể sử dụng hoặc .Brightness để điều chỉnh màu sắc tích hợp cho các điểm đánh dấu. Đối với đường viền đánh dấu, tình cờ, cả hai .Brightness.TintAndShade ảnh hưởng đến độ sáng của màu đường kẻ, nhưng cũng hoàn nguyên đường viền đánh dấu thành màu trước đó. Vì vậy, về cơ bản chúng cũng vô dụng.
Jon Peltier

0

Điều này làm việc cho tôi.

   ActiveChart.FullSeriesCollection(1).Select
    With Selection.Format.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
    With Selection.Format.Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
    End With

-1

tôi nghĩ rằng điều này cũng có hiệu quả đối với tôi, NGOẠI TRỪ rằng nó biến màu đỏ ĐỎ cho dù tôi đặt giá trị RGB nào.

ActiveChart.FullSeriesCollection (1) .Chọn     Với Lựa chọn.Format.Fill         .Visible = msoTrue         .CoreColor.RGB = RGB (255, 0, 0)         .Trans minh bạch = 0         .Chất rắn     Kết thúc với

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.