Здравствуйте!
Есть макрос копирующий лист книги в новую книгу. При этом нужно разорвать связи с исходным файлом, оставив локальные формулы (внутри листа). Проблема в том, что на листе есть ссылки на именованные диапазоны (некоторые динамические) и если удалять макросом сами именованные диапазоны, то пропадают значения. А вариант только с разрывом внешних связей не работает (excel просто отрубается). Пытался найти инфу можно ли перебрать все ячейки определенного диапазона листа на наличие ссылок на именованные диапазоны, и тогда преобразовать ячейку в значение, но ничего не нашел.
Вот сам код (компиляция из выложенных в инет):
Есть макрос копирующий лист книги в новую книгу. При этом нужно разорвать связи с исходным файлом, оставив локальные формулы (внутри листа). Проблема в том, что на листе есть ссылки на именованные диапазоны (некоторые динамические) и если удалять макросом сами именованные диапазоны, то пропадают значения. А вариант только с разрывом внешних связей не работает (excel просто отрубается). Пытался найти инфу можно ли перебрать все ячейки определенного диапазона листа на наличие ссылок на именованные диапазоны, и тогда преобразовать ячейку в значение, но ничего не нашел.
Вот сам код (компиляция из выложенных в инет):
Код |
---|
Sub ActSheetSave() Dim wb As Workbook Dim FolderName As String Dim fname As String Dim mName As String Dim n As Variant Application.ScreenUpdating = False BookPath = ActiveWorkbook.Path If BookPath = "" Then MsgBox "Сохраните файл!" Exit Sub End If mName = Replace_symbols([C2&"_"&C3&"_"&C4&"_"&H2]) ActiveSheet.Copy Set wb = ActiveWorkbook For Each n In wb.Names: On Error Resume Next n.Delete: Next 'WorkbookLinks = wb.LinkSources(Type:=xlLinkTypeExcelLinks) 'If IsArray(WorkbookLinks) Then 'For i = LBound(WorkbookLinks) To UBound(WorkbookLinks) 'wb.BreakLink Name:=WorkbookLinks(i), Type:=xlLinkTypeExcelLinks 'Next i 'End If Application.DisplayAlerts = False fname = Application.GetSaveAsFilename(InitialFileName:=mName, _ FileFilter:="Excel Files (*.xlsx), *.xlsx", _ Title:="Сохранить файл") If VarType(fname) <> vbBoolean Then ActiveWorkbook.SaveAs fname Application.DisplayAlerts = True wb.Close False ActiveSheet.Select End Sub |