Je voudrais parcourir les lignes d'une feuille de travail et affecter les zones de nom d'une colonne (la colonne E) à la valeur de cette ligne respective dans une autre colonne (la colonne B).
J'aimerais le faire de cette façon car le principe restera le même pour un addendum qui sera ajouté à ce script pour une maintenance à long terme. Par exemple, si je devais le faire manuellement, j'activerais la cellule "E2" et cliquerais sur la case du nom, puis taper "Coil_Width", qui correspond à la valeur de la cellule "B2". Cela ajoute correctement le nom au gestionnaire de noms et je peux modifier dynamiquement la valeur en tapant quelque chose dans la barre de formule pour cette cellule. J'ai essayé d'attribuer via la propriété eCell.Name = (etc.), mais il semble que cela ne fonctionne pas de la même manière pour les cellules que pour la propriété de plage car j'obtiens une erreur définie par l'application (1003).
En outre, en utilisant la norme
ActiveWorkbook.Names.Add Name:=bCell.Value, RefersTo:= eCell.Address()
ajoute simplement le nom au gestionnaire de noms et définit RefersTo sur "$ E $ 2" ou sur une cellule quelconque (ce qui est correct, je pense), mais la valeur est également définie sur "E2" (et ne peut pas être modifiée même en tapant manuellement un caractère). valeur dans la barre de formule pour cette cellule.En outre, la zone de nom de cette cellule reste toujours "E2".
Voici un exemple de code:
For Each bCell In thisWkSht.Range("B:B").Cells
'For Each bCell In thisWkSht.Range("B:B:) - this is the changed line
If bCell.Value = "" Then
'Do Nothing
ElseIf bCell.Value = "Variables" Then
'Do Nothing
'This allows me to skip the first row without much hassle
Else
Set eCell = bCell.Offset(0, 3).Cells
'Set eCell = bCell.Offset(0, 3) - this is the other changed line
eCell.Name = bCell.Value ' This line now correctly assigns the value from my
' B row and column to the name of my E row cell
End If
Next
Mes résultats montrent que je peux accéder correctement à la propriété bcell.Value, mais elle se rompt pendant la bCell.Name.Name. Il me semble que je devrais pouvoir faire quelque chose comme eCell.Name = bCell.Value ou quelque chose de similaire, mais je n'ai encore rien reçu d'autre qu'une erreur définie par l'application.
Je m'en tiens actuellement à la méthode des cellules car je ne sais pas comment aborder une sélection de plage changeante dans une instruction For Each; c'est-à-dire que je peux comprendre comment adresser mon bCell à l'ensemble de la plage ("B: B"), mais je ne saurais pas comment configurer mon eCell afin que la plage à laquelle il fait référence soit en réalité la plage du bCell compensée par trois colonnes.
Me manque-t-il quelque chose d'évident à propos de ces propriétés?
la source
Réponses:
Tout ce dont vous avez besoin est de changer cette ligne:
Pour ça:
la source