2017-10-10 2 views
2

J'ai ce code. C'est un code artificiel pour l'exemple.Comment gérer ce problème de validation Excel?

Sub x() 
    ActiveSheet.Range("A1").Validation.Delete 
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0" 
End Sub 

Si A1 est vide lorsque le code s'exécute, j'obtiens une erreur 1004, définie par l'application ou définie par l'objet. Je crois que c'est parce que la formule aboutit à #VALUE! au lieu de False. Si j'essaie de définir la validation manuellement, j'obtiens un avertissement que le résultat est une erreur, mais si je clique sur OK, la validation fonctionne normalement.

je me suis dit que c'était parce que je n'exonère les cellules vides de validation, alors j'ai ajouté la ligne:

Sub x() 
    ActiveSheet.Range("A1").Validation.Delete 
    ActiveSheet.Range("A1").Validation.IgnoreBlank = True 
    ActiveSheet.Range("A1").Validation.Add Type:=xlValidateCustom, Formula1:="=VALUE(RIGHT(A1,6))>0" 
End Sub 

Mais que l'erreur vient changeai d'une ligne. Maintenant, je reçois l'erreur 1004 sur la ligne IgnoreBlank = True. Je suppose que je pourrais temporairement entrer une valeur dans la cellule, définir la validation, puis supprimer le contenu de la cellule, mais j'espère qu'il y a une manière différente.

Est-ce que je fais quelque chose de mal? Je prévoyais à l'origine de valider par programmation à la fin au lieu d'utiliser la fonction de validation d'Excel.

Répondre

0

Il semblerait que vous ne pouvez pas définir IgnoreBlank avant que vous Add quelque chose, à quel point il est trop tard. Outre votre propre solution de contournement (et ses variantes, par exemple la validation d'une formule qui est toujours TRUE, en inversant IgnoreBlank et en remplaçant la formule par la formule réelle), vous pouvez également gérer des cellules vides dans la formule de validation elle-même. :

=IF(ISBLANK(A1), TRUE, VALUE(RIGHT(A1,6))>0)