Как удалить именованные диапазоны с помощью специального символа.Или запретить моей VBA создавать именованный диапазон со специальным символом?
Моя цель - дублировать лист (например, лист A), содержащий диапазоны имен, на другой лист (например, лист B).Из-за дублированных именованных диапазонов - диапазоны имен на листе B автоматически преобразуются в локальную область, а не в глобальную область.Мне нужен VBA для 1) автоматического переименования диапазонов имен на листе B, чтобы имена не конфликтовали с диапазонами имен на оригинальном листе A и 2), а затем преобразование локальной области на листе B в глобальную область.
Я понял, как выполнить шаг 2, благодаря решению, которое нашел на этом веб-сайте, но мне нужна помощь с выполнением шага 1. У меня возникает проблема, когда при переименовании именованного диапазона на листе B мой VBA автоматическидобавляет имя листа перед именованным диапазоном, что приводит к появлению восклицательного знака в новом именованном диапазоне.Это проблема, потому что мой шаг 2 требует удалить текущее имя в области рабочего листа, чтобы заменить его именем в книге.Но так как там есть специальный (!) Символ, мой VBA не может удалить локальную область именованных диапазонов.
Как я могу переименовать мою локальную область именованных диапазонов без VBA, автоматически помещая имя листа (которое содержит специальный символ "!") Перед именованным диапазоном.
Ex / Cell A1на листе A называется «старый», затем я дублирую этот лист на лист B. Чтобы переименовать именованный диапазон на листе A1, я использую:
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.Delete, поскольку он не может удалить специальный символ .`