2009-08-13 4 views
1

Je travaille sur une feuille de calcul Excel protégée et j'ai rencontré un problème avec les cellules que j'ai verrouillées par programmation et qui sont toujours sélectionnables. Je ne peux pas cliquer dessus directement pour les sélectionner, mais si je sélectionne la cellule en bas à droite d'une cellule verrouillée et que je clique ensuite sur celle en haut à gauche, toutes les 9 cellules (y compris la cellule 'verrouillée') choisi. Je peux aussi cliquer-glisser pour sélectionner les 9 cellules. J'utilise le code VBA suivant pour protéger et définir les critères de sélection:Pourquoi le verrouillage d'une cellule dans une feuille de calcul protégée dans Excel empêche-t-il la sélection?

Worksheets("Sheet1").Protect UserInterfaceOnly:=True 
Worksheets("Sheet1").EnableSelection = xlUnlockedCells 

J'ai essayé les deux commandes dans l'ordre inverse et obtenir les mêmes résultats.

J'ai également utilisé les menus de formatage/protection des cellules Excel pour faire la même chose et obtenir les mêmes résultats. Est-ce qu'il me manque quelque chose d'évident ou existe-t-il un autre moyen de marquer une cellule de façon programmatique pour qu'elle ne puisse pas être sélectionnée plus tard?

Répondre

1

Je pense que vous devrez créer du code dans l'événement Worksheet_SelectionChange qui vérifie si vos cellules protégées sont incluses dans la nouvelle sélection et, le cas échéant, sélectionne une autre cellule (peut-être la suivante non protégée vers la droite ou vers le bas)).

Je n'ai pas examiné le code, mais une recherche rapide pour "sélection de cellules protégées Worksheet_SelectionChange" a fait apparaître http://www.vbaexpress.com/kb/getarticle.php?kb_id=383.

1

Vous ne manquez rien, c'est simplement Excel en conservant la forme de la sélection de préférence à l'état de protection des cellules.

Les cellules sont toujours protégées, mais peuvent être copiées. L'utilisation de l'événement Worksheet_SelectionChange vous permettra d'exécuter du code pour rediriger la sélection de cellules protégées vers une autre cellule. Ce code doit être stocké dans la feuille que vous essayez de protéger.

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    Dim Selectedrange As Range 
    Dim ProtectedRange As Range 
    Dim ws As Worksheet 

    Application.EnableEvents = False 

    Set ProtectedRange = ActiveSheet.Range("A1:A10") 

    Set Selectedrange = Intersect(Target, ProtectedRange) 

    If Selectedrange Is Nothing Then 
     Exit Sub 
    Else 
     ActiveSheet.Range("B1").Select 
    End If 

    Application.EnableEvents = True 

End Sub 

Si vous voulez juste arrêter la copie de l'utilisateur sur les formules puis simplement ajouter une ligne à votre code pour définir « Formule cachée » à true. Si les cellules protégées sont copiées, seules les valeurs seront copiées.

Worksheets("Sheet1").Range("A1:A10").Locked = True 
Worksheets("Sheet1").Range("A1:A10").FormulaHidden = True 
Worksheets("Sheet1").Protect UserInterfaceOnly:=True, Password:="123" 
Worksheets("Sheet1").EnableSelection = xlUnlockedCells 

Un autre est de déplacer vos données protégées dans une autre feuille et le mettre à visibilty « très caché », de sorte qu'il ne soit plus visible dans l'interface utilisateur. Les valeurs dans la feuille 'très caché' sont toujours accessibles via la formule.

Worksheets("Sheet2").Visible = xlVeryHidden 
Questions connexes