Excel 工作表_计算:多个目标和值

Excel 工作表_计算:多个目标和值,excel,vba,Excel,Vba,如何根据其他单元格值和范围更改其他线条颜色?不仅是B37,例如,b38,其范围为>=88 clr vbGreen且=0.95且v

如何根据其他单元格值和范围更改其他线条颜色?不仅是B37,例如,b38,其范围为>=88 clr vbGreen且=0.95且v<1 clr=vbGreen 其他的 clr=vbYellow 如果结束 Me.Shapes(“直线连接器1”).Line.ForeColor.RGB=clr 端接头
这很有效

Private Sub Worksheet_Calculate()
    SetLineColor1 Me.Range("B37"), Me.Shapes("Line 1")
    SetLineColor2 Me.Range("D35"), Me.Shapes("Line 2")
End Sub

Sub SetLineColor1(c As Range, ln As Shape)
    Dim v, clr As Long

    v = c.Value
    If Not IsNumeric(v) Or Len(v) = 0 Then Exit Sub

    If v < 0.95 Then
        clr = vbRed
    ElseIf v >= 0.95 And v < 1 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub
Sub SetLineColor2(c As Range, ln As Shape)
    Dim v, clr As Long

    v = c.Value
    If Not IsNumeric(v) Or Len(v) = 0 Then Exit Sub

    If v < 88 Then
        clr = vbRed
    ElseIf v >= 88 And v < 100 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub
Private子工作表_Calculate()
SetLineColor1 Me.范围(“B37”),Me.形状(“第1行”)
SetLineColor2 Me.范围(“D35”),Me.形状(“第2行”)
端接头
子集合LineColor1(c作为范围,ln作为形状)
变暗v,clr尽可能长
v=c.值
如果不是IsNumeric(v)或Len(v)=0,则退出Sub
如果v<0.95,则
clr=vbRed
ElseIf v>=0.95,则v<1
clr=vbGreen
其他的
clr=vbYellow
如果结束
ln.Line.ForeColor.RGB=clr
端接头
子集合LineColor2(c作为范围,ln作为形状)
变暗v,clr尽可能长
v=c.值
如果不是IsNumeric(v)或Len(v)=0,则退出Sub
如果v<88,则
clr=vbRed
如果v>=88且v<100,则
clr=vbGreen
其他的
clr=vbYellow
如果结束
ln.Line.ForeColor.RGB=clr
端接头

正如您在另一篇文章中所建议的:向SetLineColor方法添加两个附加参数-

Private子工作表_Calculate()
SetLineColor Me.Range(“B37”)、Me.Shapes(“第1行”)、0.95、1
SetLineColor Me.Range(“D35”),Me.Shapes(“第2行”),88100
端接头
子集合LineColor(c为范围,ln为形状,limit1为双精度,limit2为双精度)
变暗v,clr尽可能长
v=c.值
如果不是IsNumeric(v)或Len(v)=0,则退出Sub
如果v=limit1,则v
由于所有条件都是特定的,因此您必须复制现有条件并更改所需的变量。因此,在更改事件中有两个(或更多)代码块。每一个都有所需的具体条件。或者,为了简化操作,您可以使用您的条件和对象构建一个表,并让代码在表中循环以设置连接器形状的颜色。我正在尝试这样做,并且我在
Dim v,clr中得到一个错误,只要
被复制。您可能已经猜到了,我对VBA是新手,它了解概念,但不了解细节。我也不知道如何创建你建议的表格,但这似乎是一条可行之路。蒂姆已经在你的另一封信中回答了这个问题Q@SackOvergrowth-Dim语句只需声明一次。这些变量可以反复使用。对于表格,请在工作表上创建一个包含3列的表格。范围、颜色和连接器。对于颜色,根据范围编写公式以确定颜色。然后使用
connector
color
列循环浏览此表,并使用表中相应的颜色填充每个连接器。有关详细信息,请查阅vba中的listobject行。
Private Sub Worksheet_Calculate()
    SetLineColor1 Me.Range("B37"), Me.Shapes("Line 1")
    SetLineColor2 Me.Range("D35"), Me.Shapes("Line 2")
End Sub

Sub SetLineColor1(c As Range, ln As Shape)
    Dim v, clr As Long

    v = c.Value
    If Not IsNumeric(v) Or Len(v) = 0 Then Exit Sub

    If v < 0.95 Then
        clr = vbRed
    ElseIf v >= 0.95 And v < 1 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub
Sub SetLineColor2(c As Range, ln As Shape)
    Dim v, clr As Long

    v = c.Value
    If Not IsNumeric(v) Or Len(v) = 0 Then Exit Sub

    If v < 88 Then
        clr = vbRed
    ElseIf v >= 88 And v < 100 Then
        clr = vbGreen
    Else
        clr = vbYellow
    End If
    ln.Line.ForeColor.RGB = clr
End Sub