Страницы: 1
RSS
ListObject: добавление новых строк
 
Друзья!  
Подскажите, каким образом можно добавлять новые строки в ListObject, т.е. таблицу Excel. С Range нет проблем, а, вот, в моем примере не могу этого настроить. Там необходимо при отсутствии нужного пункта в списке добавить новый.  
Подскажите, пожалуйста, как обращаться с ListObject.    
Спасибо!
 
Какая у вас версия эксель? если 2007 - у меня есть несколько примеров....
 
{quote}{login=Михаил}{date=14.09.2009 05:19}{thema=}{post}Какая у вас версия эксель? если 2007 - у меня есть несколько примеров....{/post}{/quote}  
 
Михаил, спасибо. Да, у меня 2007, однако, некоторые пользователи моих таблиц работают в 2003. Есть какие-то универсальные средства? Не помню, разве в 2003 не было таблиц, объектов ListObject???  
Спасибо за Ваши примеры!
 
К сожалению, то, что так красиво работает в 2007, совершенно не работает в 2003; а то, что работает в 2003 - не так краство в 2007...  
Из вашего примера я, честно говоря, не совсем понял, что и куда вы хотите добавлять - толи новую строку в таблицу, толи новую таблицу... Было б не плохо примерчик, по-проще, типа вот так есть, а если произошло определенное событие - должно стать вот так...
 
В 2007 сторку в таблицу я добавляю таким образом:  
Sub Добавить_Строку_В_Таблицу()  
   Application.Goto Reference:="Итог"  
   Selection.ListObject.ListRows.Add  
End Sub  
 
Здесь "Итог" - имя ячейки, с которой я начинаю вводить данные, в данном случае она должна находиться с строке "Итогов".    
В общем случае, если активная ячейка принадлежит таблице,  
 
Sub Добавить_последнюю_Строку()  
Dim myRows As Long  
myRows = Selection.ListObject.ListRows.Count + 1  
      Selection.ListObject.ListRows.Add (myRows)  
     
End Sub  
ну и каким-то образом нужно перейти на любую ячейку в таблице.  
А вообще, если в таблице (или списке- в2003) нет строки итогов, то любая запись ниже таблицы автоматом включается в таблицу.
 
Друзья!  
Спасибо за помощь!  
 
Дело в том, что в моем примере использована проверка данных, ранее ссылающаяся на динамический диапазон. Но, как Вы знаете, с этим возникают проблемы, и Excel в проверке данных не видит динамический диапазон. Поэтому, опять же с помощью знатоков этого форума, я заменил динамические диапазоны - таблицами. Проблема с проверкой данных решилась.  
 
Однако, в моем примере, при введении нового элемента списка, он добавляется в этот самый список, который сразу сортируется по алфавиту.  
 
Т.е. появилась новая проблема: как добавить новый элемент в таблицу, чтобы он там остался и потом его можно было выбрать. Раньше для добавления использовался Range, а сейчас ListObject.  
 
Точная формулировка задачи: определить нужную таблицу для добавления нового элемента и сортировки.  
 
Спасибо!
 
{quote}{login=serg1985}{date=15.09.2009 07:45}{thema=Re:}{post}Excel в проверке данных не видит динамический диапазон. {/post}{/quote}  
А с чего Вы это взяли? Видит.
 
Как раз таки наоборот, проверка даных не видит таблиц и списков. В их границах нужно создвать диапазоны. Я вчера просматривал ваш файл, там много ошибок по проверке даных.
 
Михаил, я только утверждаю, что Проверка данных видит динамический диапазон.
 
{quote}{login=Юрий М}{date=15.09.2009 08:13}{thema=}{post}Михаил, я только утверждаю, что Проверка данных видит динамический диапазон.{/post}{/quote}Да я тоже это как то и не отрицаю... а вот с именами таблиц (или списков - в 2003) не работает...  
Кстати, передо мной тоже стоит такая задача - последовательнный переход из одного списка проверки даных в другой, и, при необходимости, добавления недостающих элементов. Из-за этого я и начал изучать VBA на старости лет...
 
Упрвляться с динамическим диапазоном проще всего, если его после каждого изменения списка переименовывать диапазон с обновленными адресными ссылками. Таким способом можно организовать взаимозависимые списки на разных листах книги по ключу имени листа...
 
Вот, использовал макрос из проемов http://www.planetaexcel.ru/tip.php?aid=98 сваял простенький примерчик..
 
{quote}{login=Михаил}{date=16.09.2009 12:12}{thema=}{post}Вот, использовал макрос из проемов http://www.planetaexcel.ru/tip.php?aid=98 сваял простенький примерчик..{/post}{/quote}  
 
Михаил,  
просветите, пожалуйста,  
1) Зачем в Вашем примере есть как таблицы, так и диапазоны?  
2) Диапазоны не динамические. Каким образом они расширяются при добавлении в список?
 
{quote}{login=Юрий М}{date=15.09.2009 08:13}{thema=}{post}Михаил, я только утверждаю, что Проверка данных видит динамический диапазон.{/post}{/quote}  
 
Юрий, спасибо!  
Не могли бы Вы взглянуть на пример, в чем здесь проблема. Проверка статического диапазона - нормально, а динамический список не открывается.  
Спасибо.
 
В какой ячейке и какой динамический диапазон не виден?
 
{quote}{login=serg1985}{date=16.09.2009 12:47}{thema=Re: } Михаил,  
просветите, пожалуйста,  
1) Зачем в Вашем примере есть как таблицы, так и диапазоны?  
2) Диапазоны не динамические. Каким образом они расширяются при добавлении в список?{/post}{/quote}  
1) Таблица - сама по себе динамический диапазон. НО! ни ДВССЫЛ() ни проверка данных с именами таблиц и столбцов не работает. Поэтому выделяем столбец таблица полностью, присваеваем ему имя - получаем динамический диапазон, связанный с размером таблицы.  
2) Вы пробовали вставить не существущее имя в Н2?
 
{quote}{login=Юрий М}{date=16.09.2009 01:01}{thema=}{post}В какой ячейке и какой динамический диапазон не виден?{/post}{/quote}  
 
Юрий,  
Доходы - диапазаон статический. Если выбрать "Доходы", то можно выбрать его категорию.  
Расходы - диапазон динамический. При выборе "Расходы" раскрывающийся список недоступен.
 
Попробуйте так. Все диапазоны - динамические.
 
{quote}{login=Михаил}{date=16.09.2009 01:12}{thema=Re: Re: }{post}{quote}{login=serg1985}{date=16.09.2009 12:47}{thema=Re: } Михаил,  
просветите, пожалуйста,  
1) Зачем в Вашем примере есть как таблицы, так и диапазоны?  
2) Диапазоны не динамические. Каким образом они расширяются при добавлении в список?{/post}{/quote}  
1) Таблица - сама по себе динамический диапазон. НО! ни ДВССЫЛ() ни проверка данных с именами таблиц и столбцов не работает. Поэтому выделяем столбец таблица полностью, присваеваем ему имя - получаем динамический диапазон, связанный с размером таблицы.  
2) Вы пробовали вставить не существущее имя в Н2?{/post}{/quote}  
 
Михаил,  
1)Это интересно. То есть это еще один способ создать динамический диапазон. Однако, в своем примере Вы также используете ДВССЫЛ, как и я в своем. Почему у меня не работает, ума не приложу!  
2)Пробовал, добавляется в список. То есть, используя таблицу для построения динамического диапазона, можно для добавления новых ячеек не привязываться к самой таблице.
 
Не знаю, почему у вас не видит динамических диапазонов.... может потому, что СЧЁТЗ(Lists!$D$2:$D$65536) - слишком большие диапазоны, не успевает просчитать...
 
{quote}{login=Михаил}{date=16.09.2009 02:45}{thema=}{post}Не знаю, почему у вас не видит динамических диапазонов.... может потому, что СЧЁТЗ(Lists!$D$2:$D$65536) - слишком большие диапазоны, не успевает просчитать...{/post}{/quote}  
 
Михаил,  
уменьшил диапазон, но ничего...Хотя это уже не важно: почти вся проблема решена. Прилагаю файл, как это все получилось.  
 
Однако, теперь пошел сбой с сортировкой списка, куда добавилась новая запись. Михаил, уважаемые знатоки, посмотрите, пожалуйста, может, сможете чем помочь.  
 
Плюс на листе Записи правая кнопка мыши вызывает ComboBox, как альтернатива выпадающему списку. Также проблема с макросом. Пробовал настроить ComboBox не по правой кнопке, а просто по выделению ячейки - не получается.  
Еще раз всем спасибо!
 
Посмотрите, примерно так. Только извините, я почти все ваши макросы "закомментировал" - разбираться с ними нет ни времени, ни знаний - мне проще с нуля создать, чем старое исправить (даже свое)... Там еще надо либо проверку на ошибку сделать, либо создание нового диапазона, когда добавляется новое значение в верхний уровень...  
 
Интересно, а с таблицей на первом листе вы что будете делать? для чего она?
 
Михаил,спасибо. Буду разбираться с примером, но вроде все работает. Попробую вставить эту самую проверку.  
А таблица - будет каждый день пополняться новыми записями о расходах и доходах, по которым затем можно будет сроить разного рода отчеты.  
А с ComboBox ничего не получилось?
 
{quote}{login=serg1985}{date=17.09.2009 02:15}{thema=Re:}{post} А с ComboBox ничего не получилось?{/post}{/quote}  
Честно говоря, даже не пытался разобраться. А что они должны делать? или, что вы хотите с ними делать?
 
Михаил, еще раз спасибо. Все получилось с проверкой, был один лишний End If. Кстати, странно при преобразовании в 2007 снова что-то случалось с раскрывающимися списками. Диапазон есть, но Excel его не видит! Хотя, возможно, это связано с тем, что в новый файл я добавлял еще один лист с огромным количеством таблиц. Не знаю, но сейчас все нормально работает. Спасибо!  
 
Combobox. Он особо и не нужен, так, повыпендриваться:).  
Он в некотором смысле удобнее раскрывающихся списков. Сначала у меня было, что при нажатии правой кнопки мыши появляется ComboBox с таким же списком. Текст в нем можно форматировать, использовать автозаполнение да и вообще круто смотрится:) Однако, потом, после перехода к таблицам все нарушилось. Хотелось бы это дело вернуть, плюс сделать так, чтобы он вызывался не правой кнопкой, а просто выделением ячейки.
Страницы: 1
Читают тему
Наверх