Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объект ListObject / 25 сообщений из 27, страница 1 из 2
27.10.2016, 15:14
    #39335474
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Здравствуйте!

Имеется объект таблица на листе.
Код: vbnet
1.
ThisWorkbook.Sheets("Лист1").ListObjects(1)


Колонки "Город", "ТТ" и "Отгрузки". Нужно скопировать эту таблицу, но с условием Город = "Город1", и вставить в другую книгу.

У объекта ListObject есть возможность копировать определенные строки (не фильтр), заданные по условию, и вставлять эти строки?

Или для решения данной задачи надо использовать какой то другой объект?
...
Рейтинг: 0 / 0
27.10.2016, 17:33
    #39335663
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikkопределенные строки (не фильтр), заданные по условиюА в чем разница между строками, заданными по описанному условию, и фильтром?
У каждого объекта ListObject есть свой автофильтр, независимый от автофильтра всего листа, его используйте.
...
Рейтинг: 0 / 0
27.10.2016, 21:14
    #39335791
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Казанскийferzmikkопределенные строки (не фильтр), заданные по условиюА в чем разница между строками, заданными по описанному условию, и фильтром?
У каждого объекта ListObject есть свой автофильтр, независимый от автофильтра всего листа, его используйте.
По сути нужно взять таблицу и вставить в другой файл, но без строк города "Город2". При фильтре отбираем Город1, а Город2 скрыт, но присутствует в таблице. Надо чтобы вообще не было строк Город2.
...
Рейтинг: 0 / 0
27.10.2016, 21:30
    #39335798
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikk, копирование строк, отобранных фильтром
Код: vbnet
1.
ThisWorkbook.Sheets("Лист1").ListObjects(1).databodyrange.specialcells(xlcelltypevisible).copy dest

dest - куда копировать, например otherSheet.ListObjects(1).databodyrange.cells(1)
...
Рейтинг: 0 / 0
28.10.2016, 07:29
    #39335871
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Казанскийferzmikk, копирование строк, отобранных фильтром
Код: vbnet
1.
ThisWorkbook.Sheets("Лист1").ListObjects(1).databodyrange.specialcells(xlcelltypevisible).copy dest

dest - куда копировать, например otherSheet.ListObjects(1).databodyrange.cells(1)
Прежде чем копировать на другой лист, надо на другом листе создать пустой ListObject?
...
Рейтинг: 0 / 0
28.10.2016, 11:15
    #39336028
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
а то отображает ошибку
...
Рейтинг: 0 / 0
28.10.2016, 17:57
    #39336558
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikkПрежде чем копировать на другой лист, надо на другом листе создать пустой ListObject?Необязательно, это было как пример. Можно просто в диапазон
Код: vbnet
1.
2.
3.
'Копируем отобранные строки
ThisWorkbook.Sheets("Лист1").ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy _
    Destination:=obook.Sheets(1).Cells(1)
...
Рейтинг: 0 / 0
28.10.2016, 20:44
    #39336660
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
КазанскийМожно просто в диапазон
Код: vbnet
1.
2.
3.
'Копируем отобранные строки
ThisWorkbook.Sheets("Лист1").ListObjects(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Copy _
    Destination:=obook.Sheets(1).Cells(1)


Теперь копирует нужные строки, только заголовки не копирует. Вместе с заголовками возможно?
...
Рейтинг: 0 / 0
28.10.2016, 21:02
    #39336668
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikk, DataBodyRange замените на Range .
Здесь описано, как обращаться к разным частям умной таблицы: https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
...
Рейтинг: 0 / 0
29.10.2016, 12:34
    #39336840
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Казанскийferzmikk, DataBodyRange замените на Range .
Получилось, еще добавил преобразовать в ListObject, получился такой исходный код. Не слишком сложно написал?
...
Рейтинг: 0 / 0
29.10.2016, 12:35
    #39336841
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Казанскийferzmikk, Здесь описано, как обращаться к разным частям умной таблицы: https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables
Спасибо за ссылку!
...
Рейтинг: 0 / 0
02.11.2016, 16:06
    #39340103
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Макрос неправильно определяет количество видимых строк в автофильтре.

Почему так?
...
Рейтинг: 0 / 0
02.11.2016, 16:08
    #39340105
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
...
Рейтинг: 0 / 0
02.11.2016, 16:33
    #39340130
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikk,
F1 - Range.Rows PropertyWhen applied to a Range object that’s a multiple selection, this property returns rows from only the first area of the range.Т.е. в несвязном диапазоне .Rows относится только к первой области. Пичалька :)
Значит надо делать цикл по областям (.Areas) и суммировать их .Rows.Count, или скопировать-вставить все куда-то, получить непрерывный диапазон и брать его число строк.
...
Рейтинг: 0 / 0
02.11.2016, 16:39
    #39340136
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
А лучше использовать функцию листа ПРОМЕЖУТОЧНЫЕ.ИТОГИ
Код: vbnet
1.
2.
3.
Sub Макрос()
    КоличествоСтрок = [SUBTOTAL(3,Таблица[Город])]
End Sub
...
Рейтинг: 0 / 0
02.11.2016, 20:12
    #39340297
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
А вот .Cells в несвязном диапазоне - это все ячейки, а не только первой области!
Код: vbnet
1.
2.
3.
Sub Макрос()
    КоличествоСтрок = ThisWorkbook.Sheets("ИД7").ListObjects(1).Range.SpecialCells(xlCellTypeVisible).Cells.Count
End Sub
...
Рейтинг: 0 / 0
02.11.2016, 21:52
    #39340352
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
КазанскийА лучше использовать функцию листа ПРОМЕЖУТОЧНЫЕ.ИТОГИ
Код: vbnet
1.
2.
3.
Sub Макрос()
    КоличествоСтрок = [SUBTOTAL(3,Таблица[Город])]
End Sub

Да, работает!

Во втором аргументе функции SUBTOTAL нужно вставить переменную. Написал, но не правильно
Код: vbnet
1.
КоличествоСтрок = [SUBTOTAL(3,ThisWorkbook.Sheets("ИД7").ListObjects(1).Name [Город])]


Как правильно написать?
...
Рейтинг: 0 / 0
17.11.2016, 09:52
    #39348830
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Вот еще.

Нужно скопировать таблицу на другой лист, где
- копироваться могут либо все строки, либо не все (фильтр строк по условию)
- копируются не все колонки
- копируется другая последовательность колонок ("Город", "Мера1", "Мера5", "Мера2" и "Мера4")

Как это делается?

Еще такой нюанс. Если на вкладке "Исходные данные" в таблице включен автофильтр, но не отобраны строки, то копируется таблица с автофильтром. Если отобраны строки - то копируестя без автофильтра. Почему?

И в тот момент, после того как скопировали с отбором строк ЛистОбработанныйИсходник.ListObjects.Count равно нулю. Почему ноль, если на вкладке "Обработанные данные" есть сама таблица?
...
Рейтинг: 0 / 0
17.11.2016, 09:53
    #39348831
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
...
Рейтинг: 0 / 0
18.11.2016, 10:28
    #39349647
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikkЕсли на вкладке "Исходные данные" в таблице включен автофильтр, но не отобраны строки, то копируется таблица с автофильтром. Если отобраны строки - то копируестя без автофильтра. Почему?

И в тот момент, после того как скопировали с отбором строк ЛистОбработанныйИсходник.ListObjects.Count равно нулю. Почему ноль, если на вкладке "Обработанные данные" есть сама таблица?Видимо, логика такая - если копируется весь диапазон ListObject, на листе назначения создается ListObject. Если же копируется набор строк, то ListObject не создается, ListObjects.Count=0.
Скопировать данные в другой последовательности столбцов и одновременно отфильтровать можно расширенным фильтром. Хорошая статья тут: http://www.planetaexcel.ru/techniques/2/197/
...
Рейтинг: 0 / 0
18.11.2016, 13:10
    #39349785
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
КазанскийСкопировать данные в другой последовательности столбцов и одновременно отфильтровать можно расширенным фильтром. Хорошая статья тут: http://www.planetaexcel.ru/techniques/2/197/
Не нашел про другую последовательность и отсечение столбцов.
...
Рейтинг: 0 / 0
20.11.2016, 10:30
    #39350437
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Может быть надо скопировать таблицу в виртуальную память, там удалить не нужные колонки и там же поменять порядок колонок, потом вставить на лист? Или копировать по одной колонке в нужной последовательности?
...
Рейтинг: 0 / 0
21.11.2016, 01:07
    #39350705
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
ferzmikk, да как угодно можно. А Расширенный фильтр Вы освойте, для начала из меню - это полезная штука. Про отбор столбцов:
F1 - Отбор строк с помощью расширенного фильтраПри копировании отобранных строк в другое место можно указать столбцы, включаемые в копию. Перед отбором скопируйте заголовки нужных столбцов в первую строку области вставки результатов. Выполняя фильтрацию, введите ссылку на скопированные заголовки столбцов в поле Поместить результат в диапазон. Скопированные строки будут включать только те столбцы, заголовки которых были скопированы.
То есть на другом листе в ряд ячеек вводите "Город", "Мера1", "Мера5", "Мера2" и "Мера4" и указываете этот диапазон в поле Поместить результат в диапазон. Расширенный фильтр кстати сам почистит столбцы ниже этих заголовков перед вставкой отфильтрованных данных.
Посмотрите например
http://www.cyberforum.ru/vba/thread1672727.html перестановка столбцов
http://www.cyberforum.ru/vba/thread1592028.html несколько критериев для одного поля
http://www.cyberforum.ru/vba/thread1526195.html про критерий-формулу
http://www.cyberforum.ru/vba/thread1438381.html про размещение критерия фильтра на другом листе или книге
...
Рейтинг: 0 / 0
21.11.2016, 16:31
    #39351234
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
Делаю попроще. Копирую таблицу на другой лист. Потом перестановка, и далее удаление ненужных колонок. Пока без фильтра. На одной строке не работает. Как надо написать правильно?
...
Рейтинг: 0 / 0
21.11.2016, 17:12
    #39351274
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Объект ListObject
я пас, надоела эта тема
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Объект ListObject / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]