2015-09-22 55 views
1

我是新來的論壇,仍在學習VBA。如果範圍包含形狀的名稱,則使形狀可見

我的工作表上有幾個形狀(美國的地圖 - 每個州都有自己的形狀)。放置在地圖上的小圈子代表某些城市。我想在幾個城市之間有直線連接。雖然有很多連接器,但是我希望一次只能顯示三個,這取決於我在A8:A10範圍內的選擇。如果某個連接器未在該範圍內命名,則它應該是不可見的。

+0

發佈您的嘗試解決方案。嘗試瀏覽* WorksheetEvents *開始。現在,你的問題是缺乏細節,並在這裏脫離主題。 – L42

回答

0

你的說法應該是: 。可見= msoTrue或。可見= msoFalse

If yourCondition Then 
    Dim oActive As Worksheet  
    Set oActive = ActiveSheet 
    oActive.Shapes("CharlotteTruck").Visible = msoTrue 
End if 

編輯:

這是一個條件,你可以使用:

If Not Intersect(Target, Range("A8:A10")) Is Nothing Then 
    'condition to run when not clicked in range 
Cancel = True 'This line can be remove if not needed 
    'condition to run if cell in range was clicked 
End If 

讓我知道這是否適合你

+0

感謝您的回覆。我對這種情況有點麻煩。我怎樣才能讓Excel參考A8:A10的範圍?我在VBA語法上有些搖搖欲墜。 – jbillin4

+0

對不起,還有一個問題。我想要以這種方式格式化30多種形狀,是否可以通過查找形狀名稱來縮短代碼,而不是爲每種特定形狀編碼? – jbillin4

+0

你在這個範圍內尋找什麼樣的條件?換句話說,你什麼時候想讓這些形狀可見,以及什麼時候你想讓它們看不見?如果一個形狀可見,它們都可見? – phil652

0

您可以使用下面的代碼。假設是形狀和範圍在同一張紙上。

Public Sub Test() 

    ActivateShapes ActiveSheet.Range("A8:A10") 

End Sub 

Public Sub ActivateShapes(rInputRange As Range) 

    Dim rCell As Range 

    On Error Resume Next 

    For Each rCell In rInputRange 
     rInputRange.Parent.Shapes(rCell).Visible = msoTrue 
    Next rCell 

End Sub