2014-05-23 2 views
1

J'ai un modèle Excel qui est rempli par des feuilles ajoutées que je reçois de mes collègues. Chaque feuille que je reçois contient environ 12 plages nommées qui ont toutes le même nom. Chaque nom commence par "flags".comment supprimer les plages nommées contenant "flags"

J'ai trouvé une autre question sur stackoverflow qui donne une solution pour supprimer le nom plages avec des noms qui ne sont pas égaux aux noms donnés: loop through names and delete those not matching specified pattern

J'utilise cette solution pour créer mon propre code. Les noms que je veux supprimer (parce qu'ils rendent mon fichier terriblement lent) commencent tous par "flags". Je donc utilisé le

left(myname.namelocal, 5) 
fonction

pour trouver chaque nom dans mon classeur qui commence par « drapeaux » et l'ont supprimé.

Toutefois, ce code ne fonctionne pas. Les noms ne sont pas supprimés lorsque j'exécute le code.

Et je ne comprends pas pourquoi cela ne fonctionne pas. J'ai essayé un code similaire sur un petit fichier pour tester le code. Cela a bien fonctionné.

La seule différence est que le fichier de test n'était pas protégé par mot de passe. C'est ce que j'ai ajouté au code pour m'assurer que le code peut supprimer les noms.

Sub deletenames() 
'verwijderd alle naam-bereiken waarvan de naam begint met flags uit het verwerkingsbestand. 

Dim ws As Worksheet 
Dim myName As Name 

For Each ws In ThisWorkbook.Worksheets 

ws.Unprotect ("TM") 

Next ws 

For Each myName In ThisWorkbook.Names 

If Left(myName.NameLocal, 5) = "flags" Then myName.Delete 

Next 

End Sub 

Que puis-je faire pour que ce code fonctionne?

Répondre

0

Le problème est très probable qu'Excel autorise à la fois les plages nommées spécifiques à la feuille et à l'ensemble du classeur. Puisque vous avez mentionné que toutes les feuilles sont copiées ensemble, je soupçonne que les plages nommées sont associées à des feuilles.

Edit: Les plages nommées spécifiques feuilles ont un nom Sheet!Range, et donc votre chèque doit considérer le préfixe de la feuille. Une solution que dans votre commentaire à comparer avec le nom Like est ok:

If myName.NameLocal Like "*!flags*" Then myName.Delete 
+0

quand je change mon code et faire ik montrer un msgbox contenant le name.local pour chaque dans le classeur, je reçois des noms comme « Feuille de travail nom '! flags10_filterdatabase. Par conséquent, je pense que je devrais changer le code pour trouver le travail "flags" dans le nom de la plage, au lieu de regarder le début. Puis-je le faire en utilisant "like"? – DutchArjo

+1

ce code a fait l'affaire pour moi: 'If myName.NameLocal Like" * "&" flags "&" * "Then myName.Delete' – DutchArjo

Questions connexes