2009-06-16 12 views
0

Détails d'arrière-plan J'ai une feuille de calcul Excel avec des objets déroulants Activex (liste déroulante) qui aident l'utilisateur à connaître les options disponibles. Je l'ai fait parce que les listes déroulantes de la liste de validation des données sont trop petites en taille de police, et rassemblaient beaucoup de plaintes.MS-Excel: comment afficher la valeur d'une zone de liste déroulante dans une cellule verrouillée

Donc ma solution était à ajouter des objets combobox qui permettent à l'utilisateur de choisir parmi une gamme d'options. Cependant, je dois relier les comboboxes à une cellule avec la propriété linkedcell, de sorte que l'utilisateur et les différentes formules puissent voir ce qui a été choisi. J'ai également mis en place la liste déroulante pour qu'elle disparaisse lorsqu'elle n'est pas utilisée (à peu près de la même manière que le bouton de liste déroulante de validation des données n'apparaît que lorsque vous sélectionnez la cellule concernée).

Voici le problème: Je ne veux pas les utilisateurs de modifier la valeur de la cellule liée, donc je vous assurer la cellule liée est verrouillée chaque fois que le combobox n'est pas sélectionné:

Private Sub comboBox1_GotFocus() 
    Call unlockComboBoxTargetCell(comboBox1) 
End Sub 

la procédure ci-dessus fait ceci:

If (targetComboBox.LinkedCell <> "") Then 
     Dim targetCell As Variant 
     Set targetCell = Range(targetComboBox.LinkedCell) 
     If Not targetCell Is Nothing And targetCell.Locked <> False Then 
      unlockSheet (activesheet.Name) 
      targetCell.MergeArea.Locked = False 
      lockSheet (activesheet.Name) 
     End If 
    End If 

procédures équivalentes existent pour verrouiller la cellule cible. Toutefois, chaque fois que vous effectuez une action "Enregistrer sous" dans le classeur, il semble que les cellules liées et verrouillées créent un problème: Excel donne cette erreur de façon inattendue: "La cellule ou le graphique que vous essayez de modifier est protégé et donc en lecture seule ... " Cette erreur survient environ deux ou trois fois pour chaque cellule verrouillée et est la cellule liée pour une zone de liste déroulante.

Existe-t-il un bon moyen de surmonter ce problème? À l'heure actuelle, ma meilleure solution est de laisser les cellules déverrouillées et de placer la validation des données sur la cellule, de sorte que si l'utilisateur édite la cellule, elles seront au moins refusées lorsqu'elles tapent quelque chose de non valide. Je pourrais m'assurer que la combobox couvre la cellule liée à chaque fois qu'elle est sélectionnée, mais cela signifie parfois avoir une très grande combo agaçante avec un très petit bouton déroulant sur son côté droit.

Peut-être que je suis un peu trop particulier sur l'interface utilisateur?

Merci d'avance pour la lecture de ce post long et impliqué.

Répondre

2

Dans la procédure "lockSheet" que vous avez créée, le code pour "protéger" la feuille de calcul nécessite un paramètre supplémentaire, UserInterfaceOnly, défini sur true. J'imagine que le sous-programme LockSheet est quelque chose comme ça;

sub lockSheet(strSheetName as string) 

    thisworkbook.sheets(strSheetName).Protect 

end sub 

Essayez ceci:

sub lockSheet(strSheetName as string) 

    thisworkbook.sheets(strSheetName).Protect, UserInterfaceOnly=True 

end sub 

UserInterfaceOnly permet des changements de programme à la feuille protégée.

Bill

+0

Merci. Je me souviens d'avoir déjà vu cette option, mais je l'avais oublié. –

Questions connexes