Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.02.2012, 22:17   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Обновление значений Имен на листе

Ситуация такая: имеет шаблон листа в .xla. На нем оформление, значения по умолчанию и прочее. В том числе есть вывод значения имен. В xla этих имен, и в мы видим сообщение "#ИМЯ?". В рабочую книгу копируем этот лист командой
Код:
    Application.DisplayAlerts = False          'Отключем запрос на подтверждение.
    шаблон.Copy After:=Sheets(Sheets.Count)
    Application.DisplayAlerts = True
После копирование ячейки с ссылками на имена продолжают выводить "#ИМЯ?". Если взять ячейку на редактирование и нажать Ввод, значение измениться на содержание имени.

Как сделать чтобы имена обновились самостоятельно?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 11.02.2012, 22:47   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Как вариант, проделать это же программно:
Код:
on error resume next
for each c in cells.SpecialCells (xlCellTypeFormulas ,xlerrors): c.formula=c.formula:next
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 12.02.2012, 20:39   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
Как вариант, проделать это же программно:
Код:
on error resume next
for each c in cells.SpecialCells (xlCellTypeFormulas ,xlerrors): c.formula=c.formula:next
Номер проходит если в ячейке прямая ссылка на имя. Если в ячейки что-то вроде этого:
Код:
=ЕСЛИ(ЕЧИСЛО(ИдДоговор_Цена);ИдДоговор_Цена+ИдДоговор_НДСРазмер;"")
То все равно получаем "#ИМЯ?" при срабатывание ЕСЛИ.
Как быть?

При копировании не листа, а ячеек такой проблемы нет. Но на листе есть Имена привязанные именно к это листу, нужно что бы они так же копировались. Можно ли скопировать не ячейки, а Имена?
Если да, то можно попробовать схеме: 1. Копируем ячейки; 2. Копируем имена.

А если вынесли лист в шаблон? Ни когда с ними не работал. Как вставить в книгу лист из шаблона?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 12.02.2012, 20:51   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

> Как вставить в книгу лист из шаблона?
Код:
Sheets.Add Type:="d:\MyTemplate.xlt"
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 13.02.2012, 11:51   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от Казанский Посмотреть сообщение
> Как вставить в книгу лист из шаблона?
Код:
Sheets.Add Type:="d:\MyTemplate.xlt"
Не получается... Та же проблема и именами. :((((
Почему Имена не хотят "подхватываться" без ручного пинка?
Получается единственный выход работа по схеме: 1. копируем ячейки; 2. программно создаем имена для листа. Не фонтан....
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 16.02.2012, 21:26   #6
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Справился с задачей так, может кому интересно (запускать из xla, иначе не много изменить):
Код:
Sub Договор_Создать()
    Dim Тек_Таблица As Worksheet 
    Set шаблон = ThisWorkbook.Worksheets("Исх.данные договора")
    
    ЛистИмя = "Договор НОВЫЙ"
    'ЛистИмяКодовое = "НовоеКодовоеИмя" 'Если нужно так же менять кодовое имя раз комментировать +1 строку дальше по тексту.
    Set Тек_Таблица = Worksheets.Add(, Sheets(Sheets.Count))  'Создаем новый лист и Перемещаем его в конец.
    Application.DisplayAlerts = False          'Отключем запрос на подтверждение.
    Тек_Таблица.name = ЛистИмя      'Присваиваем ему имя.
    'ActiveWorkbook.VBProject.VBComponents(Тек_Таблица.CodeName).name = ЛистИмяКодовое 'Если так же нужно так же менять кодовое имя раз комментировать
    шаблон.Cells.Copy    'Копируем содержание шаблона.
    Тек_Таблица.PasteSpecial 'Вставляем ячейки.
    Application.DisplayAlerts = True
    'Создаем переменные заново с заменой имени листа.
    For n = 1 To шаблон.Names.Count
        Тек_Таблица.Names.Add Replace(шаблон.Names.item(n).name, шаблон.name, ЛистИмя), Replace(шаблон.Names.item(n), шаблон.name, ЛистИмя)
    Next n
    Calculate
    [ИдДоговор_Номер].Select 'У меня для удобства.
End Sub
С уважением, Алексей.

Последний раз редактировалось tae1980; 16.02.2012 в 21:29.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скорректировать код окраски повторяющих значений в листе.. Slavatron1984 Microsoft Office Excel 2 19.12.2011 17:06
отражение на листе значений из других листов alexarorel Microsoft Office Excel 1 20.04.2011 20:23
Подсчет количества значений на листе edikamn Microsoft Office Excel 5 28.09.2010 09:13
сверка значений на другом листе подстановка подходящего marc-nikita Microsoft Office Excel 5 07.02.2010 14:10
Каскадное обновление взаимосвязанных полей со списком и добавление новых значений AlEx_IB Microsoft Office Access 12 11.09.2009 16:55