VBA通过修改下一个i来简化代码

VBA通过修改下一个i来简化代码,vba,excel,Vba,Excel,我正在简化一系列不必要地复杂的陈述。我希望使用For I过程简化以下示例,但我不确定如何扩大我的陈述范围以影响图纸上更多对象的可见性(这可能是一个我不知何故遗漏的简单解决方案,隧道视觉可能在今天生效) 例如: Sheet1包含135个图表对象,它们以以下模式进行标记: A1Z A2Z A3Z A4Z A5Z A6Z A7Z A8Z A9Z B1Z B2Z B3Z B4Z B5Z B6Z B7Z B8Z B9Z 依此类推,直到图纸上的最终对象“O9Z” 当前,工作表上指定了一个CommandB

我正在简化一系列不必要地复杂的陈述。我希望使用For I过程简化以下示例,但我不确定如何扩大我的陈述范围以影响图纸上更多对象的可见性(这可能是一个我不知何故遗漏的简单解决方案,隧道视觉可能在今天生效)

例如: Sheet1包含135个图表对象,它们以以下模式进行标记:

A1Z
A2Z
A3Z
A4Z
A5Z
A6Z
A7Z
A8Z
A9Z

B1Z
B2Z
B3Z
B4Z
B5Z
B6Z
B7Z
B8Z
B9Z
依此类推,直到图纸上的最终对象“O9Z”

当前,工作表上指定了一个CommandButton_Click事件按钮,该按钮调用这些(丑陋的)过程,其编写如下:

If Sheet2.Range("D12").Value = "A1Z" Then
            Sheets("Charts").ChartObjects("A1Z").Visible = True
            Sheets("Charts").ChartObjects("A2Z").Visible = False
            Sheets("Charts").ChartObjects("A3Z").Visible = False
            Sheets("Charts").ChartObjects("A4Z").Visible = False
            Sheets("Charts").ChartObjects("A5Z").Visible = False
            Sheets("Charts").ChartObjects("A6Z").Visible = False
            Sheets("Charts").ChartObjects("A7Z").Visible = False
            Sheets("Charts").ChartObjects("A8Z").Visible = False
            Sheets("Charts").ChartObjects("A9Z").Visible = False
            Sheets("Charts").ChartObjects("B1Z").Visible = False
            Sheets("Charts").ChartObjects("B2Z").Visible = False
            Sheets("Charts").ChartObjects("B3Z").Visible = False
            Sheets("Charts").ChartObjects("B4Z").Visible = False
            Sheets("Charts").ChartObjects("B5Z").Visible = False
            Sheets("Charts").ChartObjects("B6Z").Visible = False
            Sheets("Charts").ChartObjects("B7Z").Visible = False
            Sheets("Charts").ChartObjects("B8Z").Visible = False
            Sheets("Charts").ChartObjects("B9Z").Visible = False
我可以使用For I语句在某种程度上简化这个臃肿的过程:

If Sheet2.Range("D12").Value = "A1Z" Then
Dim i As Integer
For i = 2 To 9
Sheets("Charts").ChartObjects("A" & i & "Z").Visible = False
Sheets("Charts").ChartObjects("A1Z").Visible = True
Next i
然而,我的程序的一个问题是,它只会影响对象A2Z到A9Z的可见性,而不会影响对象B1Z-O9Z

我相信,除了I之外,还可以添加第二个变量,将范围“a”、“B”、“C”、“D”等中的每个字母循环到字母“O”,并调整For I语句以解释它,从而隐藏工作表上与If语句中引号中的值不匹配的每个对象(在本例中为“A1Z”)


但是,我不确定采用哪种方法来解释这一范围的字母。

尝试在所有图表对象中循环

Dim cht As ChartObject
For Each cht In Sheets("Chart").ChartObjects
    cht.Visible = cht.Name = "A1Z"
Next cht
如果希望可见的图表是动态的,则:

Dim cht As ChartObject
For Each cht In Sheets("Chart").ChartObjects
    cht.Visible = cht.Name = Sheet2.Range("D12").Value
Next cht

您可以使用for来尝试类似的操作:

for-each循环使您能够遍历集合中的每个对象,例如,您可以对工作表中的每个工作表进行遍历

Dim chartObj As ChartObject, strTest As String

strTest = Sheet2.Range("D12").Value

    For Each chartObj In Sheets("Charts").ChartObjects
        If chartObj.Name = strTest Then
            chartObj.Visible = True
        Else
            chartObj.Visible = False
        End If
    Next chartObj