2015-11-06 6 views
0

У меня эта проблема в течение последних нескольких часов, и я был бы очень признателен за помощь в этом.Создание фигур невидимым/видимым в excel через VBA

В принципе, я хочу иметь возможность скрывать/отображать фигуры в зависимости от выбора, который пользователь делает на пользовательской форме. Я поставил задачу на очень простой пример. Если вставить форму под названием "овал 1" в простыню и запустить код:

Sub hideshape()

With ActiveSheet 

    .Shapes("Oval 1").Select 

    With Selection 

    .Visible = False 

    End With 


End With 

End Sub

форма исчезает, но когда я запускаю этот код

Sub unhideshape()

With ActiveSheet 

    .Shapes("Oval 1").Select 

    With Selection 

    .Visible = True 

    End With 


End With 

End Sub

Я получаю сообщение об ошибке «Запрошенных формы заблокированы для выбора»

Учебного пособия не защищены, и я пытался не-заперт и ткань обшивки заперт текст на свойствах формы.

Любые идеи, что вызывает это.

Спасибо вам помочь

ответ

2

Вы не можете Select скрытый объект. Однако вам вообще не нужно использовать Select, и это обычно не рекомендуется. Попробуйте просто:

Sub HideShape() 
    ActiveSheet.Shapes("Oval 1").Visible = False 
End Sub 
Sub UnhideShape() 
    ActiveSheet.Shapes("Oval 1").Visible = True 
End Sub 
-1
Public HIDE As Boolean 

    Sub T_BUTTON() 
    ActiveSheet.Shapes("T 1").Visible = HIDE 
    If ActiveSheet.Shapes("T 1").Visible = False Then 
    HIDE = True 
    Else 
    HIDE = False 
    End If 

END SUB 
0

Я решил проблему с этим кодом (Овальный = Тип 9, из MsoAutoShapeType Enumeration (Office)):

Sub hide() 
s = ActiveSheet.Shapes.Count 
For i = 1 To s 
    If ActiveSheet.Shapes(i).Type = 9 Then ActiveSheet.Shapes(i).Visible = False 
Next i 
End Sub 

Sub unhide() 
s = ActiveSheet.Shapes.Count 
For i = 1 To s 
    If ActiveSheet.Shapes(i).Type = 9 Then ActiveSheet.Shapes(i).Visible = True 
Next i 
End Sub 

Если "Тип = 9" не так, вы можете узнать тип вашей формы с кодом в Immediate окно (ctrl + G in VBA):

?ActiveSheet.Shapes("Oval 1").Type