VBA通过修改下一个i来简化代码
我正在简化一系列不必要地复杂的陈述。我希望使用For I过程简化以下示例,但我不确定如何扩大我的陈述范围以影响图纸上更多对象的可见性(这可能是一个我不知何故遗漏的简单解决方案,隧道视觉可能在今天生效) 例如: Sheet1包含135个图表对象,它们以以下模式进行标记: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
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