Problème d'ajout d'une validation de la liste dans la feuille excel à l'aide de VBA
J'ai une feuille excel qui est chargé avec un résultat dynamique d'ensemble de données. J'ai besoin d'ajouter un OUI/NON déroulant à la fin de chaque ligne une fois que toutes les données sont chargées. Je dois le faire dynamiquement que je ne connais pas la taille de l'ensemble de résultats à l'avance.
Le code suivant génère une 'Application ou définis par l'objet défini par l'erreur":
Dim firstRow As Integer
Dim lastRow As Integer
Dim I As Integer
Dim VOptions As String
VOptions = "1. Yes, 2. No"
firstRow = GetResultRowStart.row + 1
lastRow = GetResultRowStart.End(xlDown).row
For I = firstRow To lastRow
Range("AO" & firstRow & ":AO" & lastRow).Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=VOptions
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = "Options"
.ErrorTitle = ""
.InputMessage = "Click yes or no"
.errorMessage = ""
.ShowInput = True
.ShowError = True
End With
Next I
La méthode GetResultRowStart me donne la ligne de départ qui résultent de données est renseignée dans la fiche. J'ai utilisé cette méthode, d'ailleurs dans une autre partie du code de trop et il fonctionne parfaitement.
Débogage à l'aide de boîtes de message suggéré l'erreur est générée à la Plage(..).instruction select.
Des idées sur la cause de cette erreur.
C'est parce que il n'y a plus de trucs fait à l'intérieur de la boucle.Cependant le problème persiste même lorsque la liste de validation de code est en dehors de la boucle pour une cellule spécifique comme celui-ci.. Range("AO11").Sélectionnez Avec La Sélection.La Validation .Supprimer .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Opérateur:= _ xlBetween, Formula1:=VOptions .IgnoreBlank = True .InCellDropdown = True .InputTitle = "Options" .ErrorTitle = "" .InputMessage = "Cliquez sur oui ou non" .errorMessage = "" .ShowInput = True .ShowError = True End Avec
OriginalL'auteur atlantis | 2009-06-15
Vous devez vous connecter pour publier un commentaire.
Finale des pensées sur celui-ci :
Réglage de la SetFocusOnClick propriété de chaque bouton dans le classeur de faux semble avoir fait le tour (au moins pour l'instant).
Mais si c'est une condition nécessaire, il ne devrait pas avoir travaillé avec la valeur true. Cependant , il est parfois fait.
Mais c'est la solution fiable que j'ai trouvé.
Nice! Cela m'a aidé aussi. Juste une chose: ça s'appelle
TakeFocusOnClick
dans mon Excel 2003...OriginalL'auteur atlantis
Laissez-moi essayer de canaliser mon être intérieur Spolsky ici:
Si vous faites allusion à une plage qui n'est pas sur la
ActiveSheet
vous devriez qualifier entièrement la référence.Quelque chose comme la suivante devrait fonctionner:
Ok Adam...ce qui me confond...dites-moi si cela a un sens... ActiveWorkbook.Sheets("mysheet").Range("AO" & firstRow & ": "AO" & lastRow).Sélectionnez a donné un Indice en dehors de la plage d'erreur. Cependant, ce n'travail a été ActiveWorkbook.ActiveSheet.Range("AO" & firstRow & ": "AO" & lastRow) et la liste est en effet de créer dans le mysheet " Pouvez-vous expliquer ce que...?
"Subscript out of range" habituellement ici suggère que la feuille de calcul n'est pas appelé ce que vous pensez qu'il est appelé. Pourrait-il y avoir une fuite de l'espace, par exemple? J'ai pris moi-même avec celui-là.
Ce problème est déconcertant plus de moi n 'plus. Maintenant à cette ligne .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Opérateur:= _ xlBetween, Formula1:=VOptions dit-il, une erreur d'Exécution -2147417848 (80010108) erreur d'Automatisation.L'objet invoqué s'est déconnecté de ses clients. Ce que je trouve encore plus bizarre, c'est que quand je debug, il se déroule en douceur, sans erreur et ajoute une liste de validation dans la colonne à la fin de celui-ci.
pour le premier problème que vous aviez, essayez d'utiliser la feuille de index à la place du nom, par exemple ActiveWorkbook.Sheets(1).Range("AO" & firstRow & ": "AO" & lastRow).Sélectionnez
OriginalL'auteur bernie
La solution que j'ai utilisé était pour ôter la protection de la feuille de calcul avant Avec xx.la validation et les protéger si par la suite. [Je n'ai pas eu à le faire dans Excel 2000 et je pense que je n'ai pas eu à le faire dans Excel 2003, jusqu'à peut-être un service pack a été ajouté ne peut pas dire à 100%.]
OriginalL'auteur genoki
J'ai aussi été confronté au même problème, "erreur automation". Ce que j'ai fait a été d'activer la feuille que j'allais mettre la liste de validation et l'erreur a disparu.
OriginalL'auteur
J'ai vécu une très similaires problème dans Excel. J'ai trouvé le code pour définir par programmation de la validation de la liste déroulante a bien fonctionné quand j'ai couru dans la fenêtre exécution, mais ne fonctionne pas lorsqu'il est appelé à partir d'un bouton sur la feuille de calcul. J'ai maintenant compris que c'est parce que le bouton a le focus, et aucun montant d'essayer de sélectionner ou activer la feuille ou de la cellule dans le code avant le réglage de la validation semblait résoudre ce problème. Cependant, je viens de réalisé qu'il y est un " TakefocusOnClick la propriété de boutons dans Excel, qui est à True par défaut. Par mettre ce paramètre à False, le bouton n'est jamais le focus, et hop, mon code de validation fonctionne maintenant très bien.
Il pourrait ne pas être la réponse à tous les problèmes de validation, mais j'espère qu'il y a peut-être juste quelqu'un qui peut bénéficier de la ci-dessus.
Acclamations.
OriginalL'auteur Chris Perry
C'est une variation sur la "Méthode" Ajouter "de l'objet "Validation " erreur" echec de l'. Voici les causes possibles et comment les résoudre:
Feuille de calcul protégée: La feuille sur laquelle la validation des données est ajoutée ne peut pas être protégée, même si les cellules dont la validation est en train d'être ajoutés ne sont pas Verrouillé et même si le mode de protection est UserInterfaceOnly. Vous devez ôter la protection de la feuille, ajouter la validation, et puis re-protéger la feuille.
La perte de l'accent mis par la cellule de feuille de calcul gamme: Si l'accent a été prise par tout moyen de contrôle sur la feuille de calcul active (généralement un bouton de commande) qui a déjà été cliqué par l'utilisateur, cette erreur sera déclenché lorsque l' de Validation.Ajouter méthode est par la suite appelé. (Vraiment, c'est vrai!) Ceci s'applique, en particulier, à aucun bouton de commande qui exécute le code qui ajoute de la validation, mais il s'applique également à tout contrôle sur la feuille de calcul qui peut être cliqué avant l'exécution de ce code. Depuis il ne semble pas légitime de connexion entre le foyer et l'ajout de validation des données pour une cellule ou une plage, je considérer cela comme un bug Excel. Voici les solutions:
A. Prévenir la perte de l'accent mis par la feuille de calcul de la plage de cellules: Définir la TakeFocusOnClick propriété de tous les contrôles sur la feuille de calcul pour Faux.
B. Récupérer le focus à la feuille de calcul de la plage de cellules: Dans le code VBA, avant l'exécution de la de Validation.Ajouter méthode, appelez le Sélectionnez méthode de n'importe quelle cellule de la feuille de calcul. Le choix logique est de sélectionner la cellule ou la plage à laquelle la validation des données est ajouté, mais aucune cellule n'.
OriginalL'auteur pstraton
Première chose est de se débarrasser de la Sélection de l'objet. Il est le mieux adapté pour l'Enregistreur de Macro 🙂
btw dans votre boucle à chaque fois que vous sélectionnez le même bloc, encore et encore, même si vous faites partie de traitement plus sur elle, sélectionnez le bloc en cours d'élaboration dans chaque itération, ou de retirer la totalité de la boucle.
Pouvez-vous essayer cette après vous pour la boucle?
OriginalL'auteur Adarsha
J'ai eu le même problème et a trouvé l'erreur a été liée à la création de l'Application.ReferenceStyle
Voir le code corrigé ci-dessous-
OriginalL'auteur Kevin McClafferty