VBA通过修改For I Next i来简化代码

我正在简化一系列不必要的复杂陈述。 我希望使用For i过程来简化下面的示例,但是我不确定如何增加我的语句的范围,以影响表单上更多对象的可见性(这可能是一个简单的解决scheme,我错过了隧道视觉今天可能有效)。

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

A1Z A2Z A3Z A4Z A5Z A6Z A7Z A8Z A9Z B1Z B2Z B3Z B4Z B5Z B6Z B7Z B8Z B9Z 

等等,直到表单上的最后一个对象“O9Z”。

目前CommandButton_Click事件被分配在表单上调用这些(丑陋的)过程的button,它们的写法如下:

 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。

我相信有可能增加第二个variables,除了我通过在范围“A”,“B”,“C”,“D”等字母“O”,并调整For我声明说明它,以便工作表上的每个对象不匹配If语句中的引号(在本例中,“A1Z”)中的值是隐藏的。

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

尝试遍历所有图表对象。

 Dim cht As ChartObject For Each cht In Sheets("Chart").ChartObjects cht.Visible = cht.Name = "A1Z" Next cht 

如果您希望可见的图表是dynamic的,那么:

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

你可以在每个循环中使用a来尝试这样的事情:

 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 

对于每个循环,您可以遍历集合中的每个对象,例如,可以为工作表中的每个工作表执行迭代