我正在简化一系列不必要复杂的陈述。我希望使用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&# 34;," D"等等#" O"并调整For i语句以考虑它,以便工作表上的每个对象与If语句中的引号中的值不匹配(在此示例中," A1Z")被隐藏。
我不确定采用哪种方法来解释这个字母范围。
答案 0 :(得分:2)
尝试循环遍历所有图表对象。
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
答案 1 :(得分:0)
你可以尝试使用for each loop:
来尝试这样的事情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
对于每个循环,您可以遍历集合中的每个对象,例如,您可以为表格中的每个工作表执行此操作