我有一个包含许多命名范围的工作簿,我需要重命名它们。我用旧名字和新名字传播。
这有效:
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和修剪字符串,所有都使用相同的非结果。
非工作代码不会产生错误。它只是没有改变名称。
想法?谢谢!
**添加信息** rngNamedRanges.Cells(1,6)指的是包含直文的单元格。 rngNamedRanges.Cells(1,8)指的是一个包含CONCATENATE公式的单元格,该公式根据其他列中包含的其他几条信息创建新的范围名称。
答案 0 :(得分:2)
重命名总是很痛苦。请尝试以下方法:
Sub Rename()
StrOld = "MyRange1"
StrNew = StrOld & "_Renamed"
Range(StrOld).Name = StrNew
With ThisWorkbook
.Names(StrOld).Delete
End With
End Sub
循环取决于你。 :)如果有帮助,请告诉我们。
答案 1 :(得分:1)
感谢您的投入,全部!我仍然不明白为什么我给的第一个例子有效,第二个例子没有。尽管如此,以下代码似乎正在起作用。我为片段格式不佳道歉。
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
答案 2 :(得分:1)
我修改了上面的代码来重命名一些名字。关于上面的代码,循环工作表并在公式(等)中查找/替换每个NAME ......我发现我需要删除每个NAME名称的字符串开头的Sheet Reference。
'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
答案 3 :(得分:1)
这是重命名范围名称的非常简单的方法。我是从Excel Macro Mastery的Paul Kelly那里得到的。效果很好。
Sub rename_a_range_name()
Dim NewName As Variant
ThisWorkbook.Names("CurrentName").Name = "NewName"
End Sub
答案 4 :(得分:1)
将更新放入例如工作表更改事件可能会起作用。
更新:UDFs called from cells are not allowed to change things on the sheet。 (这就是我所做的)
旧:我猜有某些计算处理阶段,允许或不允许更新名称。
我想重命名范围,但有时被忽略,并且有时会出现错误1004
(application- or object-defined error
-德语:{ {1}}。
让我们说一个具有Anwendungs- oder objektdefinierter Fehler
函数,例如:
rename
我发现了以下内容:
Function rename( nold As String, nnew As String ) As Boolean
ThisWorkbook.Names(nold).Name = nnew
rename = True
End Function
错误
1004
放入=rename("oldName", "newName")
存在的A1
oldName
,它将始终被应用 找出所有内容并对其进行调试时,可能会导致cells got locked automagically and thus also causing some 1004
error。