参考形状名称和循环不起作用

时间:2014-04-26 12:09:50

标签: excel vba excel-vba shapes

我创建一个子程序,如下所示,引用一个单元格,然后选择形状。

在我的代码中,H值(名称)不起作用。请帮忙。

Sub Erectioncolour()
    J = 9
    H = 1

    Do
        If Worksheets("Vertical Chart").Cells(J, 25).Value <> "" Then
            Worksheets("Visual Chart").Shapes(H).Fill.ForeColor.RGB = RGB(5, 0, 0)
        Else
            Worksheets("Visual Chart").Shapes(H).Fill.ForeColor.RGB = RGB(255, 255, 255)
        End If

        J = J + 1 And H = H + 1
    Loop While J = 268
End Sub

1 个答案:

答案 0 :(得分:0)

  

在我的代码中,H值(名称)不起作用。

是的,它确实在起作用。

您的问题在于条件If Worksheets("Vertical Chart").Cells(J, 25) <> ""。在K列之后,该工作表中的第25行为空。因此,对于大于10的J的每个值,它将不会应用RGB(5, 0, 0),而是将RGB(255, 255, 255)应用为False部分测试。

enter image description here

因此True语句的If/Else部分只执行一次。之后,它们都评估为False,因此形状正确(根据代码)应用了Else语句中的以下内容:

Worksheets("Visual Chart").Shapes(H).Fill.ForeColor.RGB = RGB(255, 255, 255)

解决方案:

您需要在If语句中更改逻辑,或者指定非白色RGB值。

更新以解释IF语句的工作原理......

这是If语句的两个部分,True部分使用RGB(5, 0, 0)False部分为形状着色,并使用{{1}为形状着色(白色)。当您的文件当前已配置时,该语句将为{9,11,12,...,268}中的RGB(255, 255, 255)的每个值评估False。这是基于工作表中的逻辑和数据(或缺少数据)的条件。

如果您不希望这些形状为白色,则需要指定不同的RGB值。您选择哪一个取决于您,例如J看起来很绿松石。

或另一种可能性是您的.RGB(6, 255, 255)语句的测试不正确。如果这不正确,那么在你描述测试 应该如何工作之前我无法帮助你,因为当前的测试将始终做它现在正在做的事情,直到第25行中的单元格不是-blank。