Страницы: 1
RSS
Сломанное ИМЯ.
 
Всем Мяу!
В книге есть имя "свд" для диапазона сводной таблицы.
В оригинале файла это имя вдруг отказалось работать.
Сводная не обновляется. Попытки ввести в качестве источника это имя приводят к ошибке.
Но в то же время в копии, созданной кодом

Код
Sub New_Book()
    Dim New_Wb As Workbook, sh As Worksheet
    Dim nm As Name
    Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Worksheets
        If New_Wb Is Nothing Then
            sh.Copy
            Set New_Wb = ActiveWorkbook
        Else
            sh.Copy After:=New_Wb.Sheets(Sheets.Count)
        End If
        If sh.Name = "прибыль-доходы" Then
            New_Wb.Sheets("прибыль-доходы").DrawingObjects.Delete
        End If
    Next
    New_Wb.Sheets("прибыль-доходы").Activate

    For Each sh In New_Wb.Worksheets
        If sh.Name <> "сводный анализ" Then
            sh.UsedRange.Value = sh.UsedRange.Value
        End If
    Next
    On Error Resume Next
    For Each nm In New_Wb.Names
        If nm.Name <> "свд" Then
            nm.Delete
        End If
    Next
    On Error GoTo 0
    iPath = ThisWorkbook.Path
    If Not Right$(iPath, 1) = "\" Then iPath = iPath & "\"

    Filename = (iPath & Split(ThisWorkbook.Name, ".")(0) & "_" & Format(Date, "DD_MM_YY") & ".xlsm")
    New_Wb.ChangeLink Name:=ThisWorkbook.Name, NewName:=New_Wb.Name, Type:=xlExcelLinks

    New_Wb.Sheets("сводный анализ").PivotTables.Item(1).ChangePivotCache New_Wb. _
                                                                         PivotCaches.Create(SourceType:=xlDatabase, SourceData:="свд", Version:= _
                                                                                            xlPivotTableVersion12)
    New_Wb.SaveAs Filename:=Filename, FileFormat:=52
    ThisWorkbook.Close False
    Application.ScreenUpdating = True
End Sub


сводная исправно работает???
 
Сломалось - ну и фиг с ним: удалить и создать новое.
 
Юр, это не проблема.
Но почему в копии работает?
 
Я вот вижу в коде удаление имени "свд". А где его создание после удаления? Уверены, что сводная строится именно на основе этого имени? Может быть, не найдя его она строится на всем диапазоне данных?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, код оставляет только это имя, а удаляет все остальные.
То, что сводная строится на этом имени - уверен.
Когда в оригинале нажимаю изменить источник, выделяется именно нужный диапазон.
При создании этого диапазона с другим именем, сводная начинает работать.
Создаю свод, заменяю в источнике - работает.
Удаляю имя свд, сохраняю, закрываю, открываю, создаю свд, пытаюсь поменять источник - "недопустимая ссылка на источник данных".

PS И, как раз после выполнения этого кода, новый файл без проблем работает с именем свд.
Изменено: RAN - 04.11.2013 13:01:40
 
Итак. Имя создается. Область действия имени при создании вручную - Книга? Имя в той же книге, что и сводная?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Область имени - книга. Имя в той же книге.
Разницы между свд и свод - никакой. Только одно работает, а другое - нет.
 
RAN всё же имя имени рознь. Не могли бы вы выложить, что показывает locals при  nm.Name =" свд" в цикле удаления?
 
Был отлучен от компа на некоторое время.

anvg, спасибо за идею.

Проблема возникла так:
В файле был лист со списком. Я забыл, для чего этот список создавал, и лист удалил. Затем обнаружил, что один из макросов использует этот список, скопировал этот лист из передыдущей версии, и вставил. Оказалось, что этот лист притащил с собой все имена из старой книги, причем сделал эти имена именами уровня листа (скопированного), да еще и скрытыми. В результате и возник конфликт имен.
Обнаружил, запустив
Код
Sub aa()
    Dim nmm As Names
    Set nmm = ThisWorkbook.Names
    For i = 1 To nmm.Count
      ' nmm(i).Delete
    Debug.Print nmm(i).Name
    Next
End Sub

После удаления этого листа все вновь стало работать.
 
Рад, что помогло. Тоже столкнулся с особенностью именования, когда делал запрос к "умной" таблице через  ADO.
Страницы: 1
Наверх