VBA,Excel 2010 – 重命名命名范围

我有许多命名范围的工作簿,我需要重命名它们。 我已经传播了旧的名字和新的名字。

这工作:

Dim strOldName As String Dim strNewName As String strOldName = rngNamedRanges.Cells(1, 6).Value2 strNewName = strOldName & "_Renamed" With ActiveWorkbook.Names(strOldName) .Name = strNewName End With 

这不:

 Dim strOldName As String Dim strNewName As String strOldName = rngNamedRanges.Cells(1, 6).Value2 strNewName = CStr(rngNamedRanges.Cells(1, 8).Value2) With ActiveWorkbook.Names(strOldName) .Name = strNewName End With 

很明显,我正在做一些错误,我怎么分配strNewName。 。 。 我也尝试使用.text,.value和修剪string,都具有相同的非结果。

非工作代码不会产生错误。 它只是没有改变名称。

想法? 谢谢!

**添加信息** rngNamedRanges.Cells(1,6)是指包含直接文本的单元格。 rngNamedRanges.Cells(1,8)引用包含CONCATENATE公式的单元格,该公式根据其他列中包含的其他信息创build新的范围名称。

重命名总是很痛苦。 尝试以下操作:

 Sub Rename() StrOld = "MyRange1" StrNew = StrOld & "_Renamed" Range(StrOld).Name = StrNew With ThisWorkbook .Names(StrOld).Delete End With End Sub 

循环取决于你。 :)让我们知道这是否有帮助。

感谢您的意见! 我还是不明白为什么我给的第一个例子工作,第二个例子没有。 尽pipe如此,下面的代码似乎正在工作。 我为片段的糟糕格式道歉。

 Dim rngNamedRanges As Range Dim strOldName As String Dim strNewName As String Dim strRefersTo As String Set rngNamedRanges = ActiveWorkbook.Worksheets("Named Ranges").Range("A2:K909") i = 1 Do Until [CONDITION] = "" strOldName = CStr(Trim(rngNamedRanges.Cells(i, 6).Value2)) strNewName = CStr(Trim(rngNamedRanges.Cells(i, 8).Value2)) strRefersTo = ActiveWorkbook.Names(strOldName).RefersTo 'Update all the formulas to use the new name. For Each ws In Worksheets If ws.Name <> "Named Ranges" Then ws.Cells.Replace What:=strOldName, Replacement:=strNewName, LookAt _ :=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False End If Next 'Delete old name and replace with the new one ActiveWorkbook.Names(strOldName).Delete ActiveWorkbook.Names.Add strNewName, strRefersTo End If strOldName = "" strNewName = "" i = i + 1 Loop 

我修改了上面的代码重命名一些名称。 关于上面的代码,为了循环遍历工作表,并find/replace公式(等)中的每个名称…我发现我需要删除每个名称的string开始的工作表参考。

 'Update all the formulas to use the new name. myStart = InStr(1, strOldName, "!", vbTextCompare) + 1 myLength = Len(strOldName) - myStart + 1 strOldNameSHORT = Mid(strOldName, myStart, myLength) myStart = InStr(1, strNewName, "!", vbTextCompare) + 1 myLength = Len(strNewName) - myStart + 1 strNewNameSHORT = Mid(strNewName, myStart, myLength) For Each ws In Worksheets ws.Cells.Replace What:=strOldNameSHORT, Replacement:=strNewNameSHORT, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False Next