Trouver et replace pour les rangs nommés

Pour une raison quelconque, le rlocation de la fonction que j'ai dans cette macro ne fonctionne pas si je change la valeur de YTD et YTG en ", 9" et ", 12", la macro ne fonctionnera pas. Voici ce que j'ai.

Sub Rename() Dim YTG As Ssortingng Dim YTD As Ssortingng Dim Shiftold As Ssortingng Dim Shitnew As Ssortingng i = 1 YTG = "<>YTG" YTD = "YTD" Shiftold = "0,0,1" ShiftNew = "0,12,1" For Each Name In ActiveWorkbook.Names If InStr(1, Names(i).RefersTo, YTG) > 0 Then Names(i).RefersTo = Replace(Names(i).RefersTo, YTG, YTD) End If If InStr(1, Names(i).RefersTo, Shiftold) > 0 Then Names(i).RefersTo = Replace(Names(i).RefersTo, Shiftold, ShiftNew) End If i = i + 1 Next Name End Sub 

Des idées sur la raison pour laquelle la macro ne fonctionne plus?

Je recommand vivement d'utiliser Option Explicit pour forcer les déclarations de variables, qui attraperont les fautes de frappe et (la plupart) les déclarations manquantes.

Rename est un choix terrible de nom de macro (comme Name est un mauvais choix de nom de variable) car il se chevauche avec des methods courantes, etc. et, dans ce cas, donne peu d'idée de ce qui va être affecté.

Comme cela a été observé dans les commentaires, vous n'utilisiez pas vraiment la variable For Each loop. Cela rend tout à fait inutile, mais en fait, ce serait une meilleure façon d'accéder aux éléments de la collection.

Voici mes améliorations proposées; notez que les commentaires parlent de la façon dont je l'ai changé, alors vous devriez effectivement append des commentaires décrivant un but réel plutôt que de les utiliser.

 Sub UpdateNamedRanges() ' specific macro title Dim YTG As Ssortingng Dim YTD As Ssortingng Dim ShiftOld As Ssortingng Dim ShiftNew As Ssortingng ' corrected Dim AName As Name 'declared YTG = "<>YTG" YTD = "YTD" ShiftOld = "0,0,1" ShiftNew = "0,12,1" For Each AName In ActiveWorkbook.Names ' use loop variable If InStr(1, AName.RefersTo, YTG) > 0 Then AName.RefersTo = Replace(AName.RefersTo, YTG, YTD) End If If InStr(1, AName.RefersTo, ShiftOld) > 0 Then AName.RefersTo = Replace(AName.RefersTo, ShiftOld, ShiftNew) End If Next AName End Sub