Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何更改Excel图形中的标记颜色?_Vba_Excel_Graph_Excel Charts - Fatal编程技术网

Vba 如何更改Excel图形中的标记颜色?

Vba 如何更改Excel图形中的标记颜色?,vba,excel,graph,excel-charts,Vba,Excel,Graph,Excel Charts,我有一个带标记的Excel线条图 如果标记低于阈值,我需要更改标记的颜色。 例如,下图是标记高于阈值的每月结果。如果结果低于某一点,我需要标记来改变颜色(第二张图) 我知道如何手动更改标记颜色。这能自动完成吗? 提前感谢您的帮助。下面是测试 Sub setMarkerColor() Dim myCht As ChartObject Dim n As Long Dim adr As String Dim p As Double Application

我有一个带标记的Excel线条图

如果标记低于阈值,我需要更改标记的颜色。
例如,下图是标记高于阈值的每月结果。如果结果低于某一点,我需要标记来改变颜色(第二张图)

我知道如何手动更改标记颜色。这能自动完成吗? 提前感谢您的帮助。

下面是测试

Sub setMarkerColor()
    Dim myCht As ChartObject
    Dim n  As Long
    Dim adr As String
    Dim p As Double

    Application.ScreenUpdating = False
    For Each myCht In ActiveSheet.ChartObjects
        With myCht.Chart
            adr = .SeriesCollection(1).Formula '<~~ First grapth, if 2nd change to .SeriesCollection(2).Formula
            adr = Split(adr, ",")(2)
            For n = 1 To Range(adr).Cells.Count
               p = Range(adr)(n)
               If p < 15 Then '<~~ set value 15
                   '.SeriesCollection(1).Points(n).HasDataLabel = True
                   With .SeriesCollection(1).Points(n) '<~~ First grapth, if 2nd change to .SeriesCollection(2).Points(n)
                    .MarkerForegroundColor = RGB(0, 255, 0)
                    .MarkerBackgroundColor = RGB(255, 0, 0)
                    End With
               End If
            Next n
        End With
    Next myCht
    Application.ScreenUpdating = True
 End Sub
Sub-setMarkerColor()
将myCht设置为图表对象
长
将adr变暗为字符串
将p变暗为双精度
Application.ScreenUpdating=False
对于ActiveSheet.ChartObjects中的每个myCht
用myCht.图表

adr=.SeriesCollection(1).Formula'这可以用VBA来完成:
MyChart.FullSeriesCollection(x).Points(y).Format.Fill.ForeColor.RGB=RGB(255,0,0)
其中
x
是系列集合,
y
是您想要更改的集合中的点谢谢您。李,我运行了您提供的代码,并一直得到了一个答案编译错误:外部过程无效,因此我不清楚需要编辑什么。很抱歉,我修改了导致该错误的代码。最后一个问题:在代码中,如果标记低于阈值,如何指定要发生的颜色更改?例如,该图表基于以下结果:99.6%、99.9%、99.5%、99.5%、99.9%和99.7%。如果结果高于99.0%,则点(标记)保持绿色。如果低于99.0%(例如98%),则点(标记)应变为红色。如何进行此修改?
Sub setMarkerColor()
    Dim myCht As ChartObject
    Dim n  As Long
    Dim adr As String
    Dim p As Double
    Dim myVal As Long
    Application.ScreenUpdating = False
    For Each myCht In ActiveSheet.ChartObjects
        With myCht.Chart
            adr = .SeriesCollection(1).Formula '<~~ First grapth, if 2nd change to .SeriesCollection(2).Formula
            adr = Split(adr, ",")(2)
            For n = 1 To Range(adr).Cells.Count
               p = Range(adr)(n)
               If p >= 0.99 Then '<~~ set value 0.99
                    myVal = RGB(0, 255, 0)
                Else
                    myVal = RGB(255, 0, 0)
                End If
                   '.SeriesCollection(1).Points(n).HasDataLabel = True
                   With .SeriesCollection(1).Points(n) '<~~ First grapth, if 2nd change to .SeriesCollection(2).Points(n)
                    .MarkerForegroundColor = RGB(0, 255, 0)
                    .MarkerBackgroundColor = myVal
                    End With

            Next n
        End With
    Next myCht
    Application.ScreenUpdating = True
 End Sub