Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.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
根据不同列中的值在excel中更改气泡图的颜色和形状_Excel_Vba_Colors_Bubble Chart - Fatal编程技术网

根据不同列中的值在excel中更改气泡图的颜色和形状

根据不同列中的值在excel中更改气泡图的颜色和形状,excel,vba,colors,bubble-chart,Excel,Vba,Colors,Bubble Chart,我有一个电子表格,里面有很多数据,一些数据显示在气泡图中,点的大小也正确显示 现在,我需要根据数据的状态更改颜色(和形状,但稍后会更改),数据显示在Z行,值从1(红色)到3(绿色) 我的VBA技能现在已经很生疏了,我不明白为什么下面的代码只会改变第一点的颜色 Option Explicit Sub ColortheFingpoints() Dim cht As Chart Dim srs As Series Dim pt As Point Dim p As Lon

我有一个电子表格,里面有很多数据,一些数据显示在气泡图中,点的大小也正确显示

现在,我需要根据数据的状态更改颜色(和形状,但稍后会更改),数据显示在Z行,值从1(红色)到3(绿色)

我的VBA技能现在已经很生疏了,我不明白为什么下面的代码只会改变第一点的颜色

Option Explicit
Sub ColortheFingpoints()
    Dim cht As Chart
    Dim srs As Series
    Dim pt As Point
    Dim p As Long
    Dim valRange As Range, cl As Range
    Dim myColor As Long

Set cht = ActiveSheet.ChartObjects(1).Chart
Set srs = cht.SeriesCollection(1)
Set valRange = Range("Z8:Z10")

    For p = 1 To srs.Points.Count
    Set pt = srs.Points(p)
    Set cl = valRange(p)

    With pt.Format.Fill
        .Visible = msoTrue
        Select Case LCase(cl)
            Case "1"
                myColor = RGB(255, 0, 0)
            Case "2"
                myColor = RGB(255, 140, 0)
            Case "3"
                myColor = RGB(0, 128, 0)
        End Select

        .ForeColor.RGB = myColor

    End With
Next

End Sub
编辑1:

问题似乎是它只运行一次,因此只查看单元格Z8,而不查看单元格Z9或以下内容。克里斯,尝试更改

Set cl = valRange(p)


我不知道,为什么你的代码是工作的,但这一个应该是更人性化的可读性。告诉我它是否有效

它对我有用。尝试在设置cl=后添加调试。打印cl.地址和“”&cl,并检查立即窗口。这对我来说很好。你所有的数字都是1、2还是3?如果没有,则颜色不会改变是的,如果我改变第一个单元格中的数字,我可以看到变化,但不管我在下面的单元格中放了什么,它总是会改变第一个。@MarcinSzaleniec输出只是显示“$Z$8 2$Z$8 2$Z$8 2$Z$8 2”仍然给我相同的错误,它正确读取了Z8的值,但是Z9的值。“下一个”部分能被意图否定吗?压痕是为我们,凡人准备的。但是,为了清晰起见,您应该键入Next p。在上面的评论中,你说它总是读Z8,而不是Z9。也许试着检查你的电子表格,如果Z8之后没有隐藏行,或者像我说的那样,你的宏在我的计算机上是正常的。没有隐藏行或任何东西,但是如果我强制代码读取“Z9”,它会覆盖第8行点的颜色?这绝对不是我想要的。谢谢你的时间!
Set cl = valRange.Range("A" & p)