VBA 代码转 show/hide 象形图

VBA code to show/hide pictograms

我有一些代码可以根据单元格的值显示正确的健康危害象形图。

如果 D48 中的结果是 'AMBER-01' 或 'GREEN' 是否有效,但它对其他结果无效?

我已尽量保持简单,但我无法弄清楚为什么它不起作用?

Sub COSHH()

'If statements for visibility of Pictograms


If Sheets("COSHH").Range("D48").Value = "RED-01" Then

Sheets("Formulation").Shapes.Range(Array("GreenCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("AmberCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("RedCOSHH")).Visible = msoTrue
Sheets("Formulation").Shapes.Range(Array("RedCOSHH2")).Visible = msoFalse


ElseIf Sheets("COSHH").Range("D48").Value = "AMBER-01" Then

Sheets("Formulation").Shapes.Range(Array("GreenCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("AmberCOSHH")).Visible = msoTrue
Sheets("Formulation").Shapes.Range(Array("RedCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("RedCOSHH2")).Visible = msoFalse


ElseIf Sheets("COSHH").Range("D48").Value = "AMBER-02" Then

Sheets("Formulation").Shapes.Range(Array("GreenCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("AmberCOSHH")).Visible = msoTrue
Sheets("Formulation").Shapes.Range(Array("RedCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("RedCOSHH2")).Visible = msoFalse


ElseIf Sheets("COSHH").Range("D48").Value = "GREEN" Then

Sheets("Formulation").Shapes.Range(Array("GreenCOSHH")).Visible = msoTrue
Sheets("Formulation").Shapes.Range(Array("AmberCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("RedCOSHH")).Visible = msoFalse
Sheets("Formulation").Shapes.Range(Array("RedCOSHH2")).Visible = msoFalse



End If

End Sub

有人有什么想法吗?我试过将最后一个更改为其他。我尝试将每个部分分解成它自己的 IF 语句。

不开心!!

提前致谢

您的 if 语句集似乎没有问题。使用您提供的代码,我无法判断正在提取哪些确切信息,或者阵列中发生了什么。但是,您的 if 语句中的一行一定会给您带来问题。请务必使用消息框并使用 F8 单步执行代码以更好地了解正在发生的事情。请参阅下面我的测试代码,因为它运行正常。

Sub test()

If Sheets("Sheet2").Range("A1").Value = "RED-01" Then

Cells(2, "A") = "hi"

ElseIf Sheets("Sheet2").Range("A1").Value = "AMBER-01" Then

Cells(2, "A") = "hi2"

ElseIf Sheets("Sheet2").Range("A1").Value = "AMBER-02" Then

Cells(2, "A") = "hi3"

ElseIf Sheets("Sheet2").Range("A1").Value = "GREEN" Then

Cells(2, "A") = "hi4"

End If

End Sub