2015-11-06 1 views
0

Je rencontre ce problème depuis quelques heures et j'apprécierais vraiment de vous aider.Rendre les formes invisibles/visibles dans Excel via VBA

Fondamentalement, je veux être capable de cacher/afficher des formes en fonction des sélections effectuées par un utilisateur sur un formulaire utilisateur. J'ai divisé le problème en un exemple très simple. Si j'insérer une forme appelée "ovale 1" dans une feuille et exécuter le code:

Sous hideshape()

With ActiveSheet 

    .Shapes("Oval 1").Select 

    With Selection 

    .Visible = False 

    End With 


End With 

End Sub

la forme disparaît, mais quand je lance ce code

Sub unhideshape()

With ActiveSheet 

    .Shapes("Oval 1").Select 

    With Selection 

    .Visible = True 

    End With 


End With 

End Sub

je reçois une erreur « Formes demandées ne sont pas verrouillés pour la sélection »

Le classeur est pas protégé et j'ai essayé décochant texte verrouillé et verrouillé sur les propriétés de forme.

Toutes les idées à l'origine de cette situation.

Merci pour vous aider à

Répondre

2

Vous ne pouvez pas Select un objet caché. Cependant, vous n'avez pas besoin d'utiliser Select du tout, et ce n'est généralement pas recommandé. Essayez simplement:

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

Je résolus problème avec ce code (ovale = Type 9, de 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 

Si "type = 9" est erroné, vous pouvez trouver le type de votre forme avec le code Immédiat fenêtre (ctrl + G en VBA):

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