2016-10-27 5 views
1

不必要に複雑な一連のステートメントを簡略化する処理中です。私は以下の例をFor iプロシージャを使って単純化したいが、シート上のより多くのオブジェクトの可視性に影響するようにステートメントのスコープを増やす方法は不明だ(これは簡単に解決できないだろう。今日は有効かもしれない)。VBA For iを変更してコードを簡素化する次の記事

例:

A1Z 
A2Z 
A3Z 
A4Z 
A5Z 
A6Z 
A7Z 
A8Z 
A9Z 

B1Z 
B2Z 
B3Z 
B4Z 
B5Z 
B6Z 
B7Z 
B8Z 
B9Z 

そしてように、シート上の最終的なオブジェクトに至るまで、「O9Z」: シート1は、135個のチャート以下のパターンで標識されているオブジェクトが含まれています。私はやや私のために使用してこの肥大化した手順を簡素化することができる午前

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 

:現在CommandButton_Clickイベントは次のように書かれているこれらの(醜い)手続きを呼び出し、シート上のボタンに割り当てられ

声明:私の手順で

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 

一つの問題は、しかし、それだけでB1Z-O9Zオブジェクトに影響を与えずにA9ZによるオブジェクトA2Zの可視性に影響を与えることです。

"A"、 "B"、 "C"、 "D"などの範囲の各文字をループするiに加えて、文字 "O"に2番目の変数を追加すると、 Ifステートメント(この例では "A1Z")内の値が引用符で囲まれていないワークシート上のすべてのオブジェクトが非表示になるように、For iステートメントを調整します。

しかし、私はその範囲の文字を説明するために採用する方法がわかりません。

答えて

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 
0

をあなたは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 

Aは有効コレクション内の各オブジェクトを反復処理します。たとえば、シートの各ワークシートに対して行うことができます。

関連する問題