2016-09-21 308 views
0

我寫了一個vba代碼來隱藏/取消隱藏我分配給「按鈕」的活動工作表中的圖表/列表框,或者只是從Excel中的「插入」選項卡。此代碼適用於1形狀,但我無法使其與多個工作。我是VBA的新手,所以我不確定所有的語法細節。下面是我有:隱藏/取消隱藏圖表/框的VBA代碼

Sub OverviewB() 

    With ActiveSheet.Shapes("Rounded Rectangle 1").TextFrame2.TextRange.Characters 

     If .Text = "Hide Overview" Then 

      .Text = "Show Overview" 

      ActiveSheet.Shapes("Chart 20", "List Box 1", "Chart 19", "List Box 3", "Chart 22", "List Box 4", "Chart 24", "List Box 5").Visible = False 

     Else 

      .Text = "Hide Overview" 

       ActiveSheet.Shapes("Chart 20", "List Box 1", "Chart 19", "List Box 3", "Chart 22", "List Box 4", "Chart 24", "List Box 5").Visible = True 



     End If 
    End With 
End Sub 

我有一個行分隔符「_」在我的圖表/列表框名稱的中間,這樣它不寬,但我還是把說出來,因爲我認爲它可能導致一些錯誤。

任何人都可以看到語法錯誤在這裏?我收到的錯誤是: 「運行時錯誤450」:錯誤的參數數量或無效的屬性分配。

+0

指定的項目它已經我已經好久沒做過任何的Excel編程,但我認爲你需要Shapes.Range(... )。 ActiveSheet.Shapes只是給你一個集合,你需要從它創建一個Range對象。 – Mick

回答

2

錯誤消息提供了一些提示,錯誤的參數數量或無效的屬性確定。您正在向.Shapes屬性發送太多參數。

Worksheet.Shapes property集合只接受一個參數並返回一個Shapes object,它是Shape objects的集合。來自dox,

使用Shapes(index),其中index是形狀的名稱或索引號,以返回單個Shape對象。

並進一步:

使用Shapes.Range(index),其中index是該形狀的名稱或索引號或形狀的名稱或索引號的數組,返回一個ShapeRange集合,表示Shapes集合的子集。

你需要設置在數組中的元素和範圍內

ActiveSheet.Shapes.Range(Array("Chart 20", "List Box 1", "Chart 19", "List Box 3", "Chart 22", "List Box 4", "Chart 24", "List Box 5")).Visible = True 
+0

太棒了。很好的信息,謝謝 – DukeLuke

+0

當我點擊它時,我怎麼可以將這個形狀調暗,並在第二次點擊時將它恢復正常顏色 – DukeLuke

+0

謝謝大衛,下次我會再深入講述:) @DukeLuke我不太確定生命週期的對象認爲點擊事件,您需要深入瞭解這一點。提示:Google處理Shapes上的單擊事件。 – Sgdva