Excel a trouvé du contenu illisible - la Validation des Données
J'ai quelques zones de liste déroulante que j'renseigner sur l'ouverture du classeur - la source des données proviennent d'une base de données.
Je remplir mes zones de liste déroulante à l'aide de la validation des données avec le code suivant:-
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=list
.IgnoreBlank = False
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
où liste séparée par des virgules de la chaîne que j'ai créé, à partir de la base de données du jeu d'enregistrements.
Tout cela fonctionne très bien. Le problème se pose quand je l'ai ré-ouvrir le classeur plus tard. J'obtiens une erreur
"Excel a trouvé du contenu illisible. Voulez-vous récupérer le contenu de ce fichier"
Vous dire Oui et Excel vous donne ensuite
"Excel a été en mesure de réparer le fichier en supprimant des fonctionnalités"
Et la Validation des données provenant de certaines zones de liste modifiable est allé
Je soupçonne depuis quelques recherche sur internet que la chaîne que j'utilise pour mes Données de Validation est trop long?
Ce n'est pas une option pour moi, pour ajouter le jeu d'enregistrements des valeurs à une feuille masquée et définir la Validation des Données de la source à une plage sur la feuille masquée comme les boîtes combo sont dynamiques et les hacher et changer en fonction de la sélection de l'utilisateur. J'ai vraiment besoin juste pour être en mesure de définir les Données de Validation de ma chaîne que j'ai créé, à divers moments de l'interaction de l'utilisateur.
Si c'est le cas de la chaîne de caractères trop longue est-il possible d'ajouter à la Validation de Données, ou il y a un autre truc que je peux utiliser pour contourner ce problème?
- la chaîne est limitée à 255 caractères. aucune des exceptions ou des astuces-si vous avez besoin de plus de temps que vous avez à utiliser une gamme
- Merci Josie. Intéressant que ça ne marche pas, erreur au moment de l'établissement du Valiation. Seulement quand vous allez à l'ouvrir la prochaine fois. Comportement Bizarre
- est la bonne réponse, merci
Vous devez vous connecter pour publier un commentaire.
J'ai manipulé la validation des listes avant dans certains de mes Excel projets. Lorsque vous définissez la validation d'Autoriser:Liste, vous pouvez configurer votre Source de données d'un classeur au niveau de la plage nommée. Dans cet exemple, j'ai défini une plage nommée "listrange":
Vous n'aurez jamais une erreur pour que la formule de chaîne est trop longue.
J'ai mis tous mes validation-référencé des plages nommées dans une feuille de calcul, et de le rendre cachés. Alors mon code manipule ces plages nommées, qui à son tour mettre à jour les valeurs disponibles à partir de la validation de menus déroulants.
Il peut être difficile de mettre à jour dynamiquement la taille des plages nommées, alors qu'ils sont en train d'être mis à jour, mais il n'est pas trop dur avec VBA, et surtout pas si vous êtes de retour définit à partir d'une base de données, où vous pouvez obtenir un nombre d'enregistrements. L'alternative est de passer le contrôle ActiveX route, mais j'aime bien le nettoyer, natif regard et la sensation de la validation des données menus déroulants.
Viens de tomber sur ce problème (limite de validation des données de la formule de la longueur au classeur d'ouverture), et comme l'OP ne veux pas aller avec l'auxiliaire plages.
Ma solution est de supprimer les validations dans la
Workbook_BeforeSave
gestionnaire.Mon cas d'utilisation est de toujours actualiser les données à partir de sources externes, donc c'est une option viable pour toujours effacer toutes les données importées et validations avant d'enregistrer le classeur.
J'ai résolu ce problème en supprimant ma validation dans WorkbookBeforeSave événement. Cependant, je suis en utilisant C#
Il semble que vous avez raison avec la longueur de chaîne de
Validation formula1 parameter
. Ma suggestion pour vous est comme suit (des informations supplémentaires sont placés en tant que commentaires dans le code):il y a un moyen de contourner, d'enregistrer les chaînes de caractères que vous utilisez pour votre mise en forme conditionnelle quelque part dans le classeur avant de l'utiliser. lorsque vous les utilisez, la référence à la plage où vous les avez enregistrés et non pas à partir de chaînes de caractères. Rappelez-vous la nostalgie de la chaîne de mise en forme conditionnelle est ce qu'il provoque
faire une fonction qui lors de la fermeture du classeur vide, le problème de formatage et d'autres fonctions que lors de l'ouverture remet sur
Le problème est résolu et il fonctionne un régal 🙂