如何删除具有特殊字符的命名范围。还是阻止我的vba创建具有特殊字符的命名范围?
我的目标是将包含名称范围的工作表(例如工作表A)复制到另一工作表(例如工作表B)。由于命名范围重复,工作表B上的名称范围会自动转换为本地范围,而不是全局范围。我需要一个VBA,以便1)自动重命名工作表B上的名称范围,以使名称与原始工作表A上的名称范围不冲突; 2)然后将工作表B上的本地范围转换为全局范围。
由于我在此网站上找到了一个解决方案,因此我已经找到了执行步骤2的方法,但是我需要完成步骤1的帮助。当我在工作表B上重命名命名范围时,我遇到了问题VBA自动将工作表名称添加到命名范围的前面,这会使惊叹号出现在新的命名范围中。这是一个问题,因为我的第2步需要删除作用域为工作表的当前名称,以便替换为工作簿作用域的名称。但是,由于其中有一个特殊的(!)字符,因此我的VBA无法删除名为ranges的本地范围。
如何在不使VBA自动将工作表名称(包含“!”特殊字符)放置在命名范围之前的情况下,重命名本地范围命名范围。
工作表A上的Ex /单元格A1命名为“旧” 然后,我将此工作表复制到工作表B。要重命名A1工作表B上的命名范围,请使用:
Sub RangeRename
Dim N As Name
For Each N In ActiveWorkbook.Names # I only want to activate current
sheet but not sure how to write that yet
N.Name = WorksheetFunction.Substitute(N.Name, "old", "new") # this
replaces range old to new
Next N
End Sub```
但是,当我运行宏时,新的命名范围变为“ SheetB”! 我的第2步需要删除此命名范围,但不能删除!请帮我解决这个问题。
这是我的步骤2:
enter code here
Public Sub RescopeNamedRangesToWorkbook()
Dim wb As Workbook
Dim ws As Worksheet
Dim objName As Name
Dim sWsName As String
Dim sWbName As String
Dim sRefersTo As String
Dim sObjName As String
Set wb = ActiveWorkbook
Set ws = ActiveSheet
sWsName = ws.Name
sWbName = wb.Name
'Loop through names in worksheet.
For Each objName In ws.Names
'Check name is visble.
If objName.Visible = True Then
'Check name refers to a range on the active sheet.
If InStr(1, objName.RefersTo, sWsName, vbTextCompare) Then
sRefersTo = objName.RefersTo
sObjName = objName.Name
'Check name is scoped to the worksheet.
If objName.Parent.Name <> sWbName Then
'Delete the current name scoped to worksheet replacing with workbook scoped name.
sObjName = Mid(sObjName, InStr(1, sObjName, "!") + 1, Len(sObjName))
objName.Delete
wb.Names.Add Name:=sObjName, RefersTo:=sRefersTo
End If
End If
End If
Next objName
End Sub
它在objName处出错。删除,因为它不能删除特殊字符.``