Найти нужное значение в таблице по условию
Модератор: Naeel Maqsudov
Файл "Book6.2" из поста №35 это оно и есть...
Лист "Сетка (8 уч.)" скопировался не сначала страницы... Из-за этого не уместился на нём лист "Сетка (4 уч.)" (не хватило как раз одной строки).
Разрыв в одну строку не нужен, если следующий копируемый лист не умещается на странице...
В коде макроса в файле из поста №35 "Book6.2" строку замените на
Код: Выделить всё
i = Cells(Rows.Count, 1).End(xlUp).Row + 2
Код: Выделить всё
i = Cells(Rows.Count, 1).End(xlUp).Row + 1
Теперь разрыва нет между "Сетка (8 уч.)" и "Сетка (4 уч.)". Разрыв нужен, если данные страниц копируемых листов с разрывом в одну строку между собой умещаются на одной странице, если не умещаются, то разрыв между ними не нужен...
И как сделать чтобы не копировались кнопки макросов с копируемых листов...
И как сделать чтобы не копировались кнопки макросов с копируемых листов...
Вроде разобрался. Смотрите. Проверяйте...
Теперь все объекты (кнопки, флажки и т. п.) из листов со скобками копируются на лист "Протокол поединков" вместе с данными, а после копирования удаляются.
Теперь все объекты (кнопки, флажки и т. п.) из листов со скобками копируются на лист "Протокол поединков" вместе с данными, а после копирования удаляются.
- Вложения
-
- Book6.3..zip
- (70.05 КБ) 135 скачиваний
Да, в примере Book6.3 всё так, но код в нём теперь, как я понял, просматривает листы на предмет копирования полностью, т.к. нет строки:У меня с 79 строки, включая столбец "A", имеются и другие данные, которые не нужно выводить в протокол. А при новом коде он и их затрагивает, и информация выводится совсем не так как нужно... Для наглядности, просто скопируйте любую таблицу и вставьте её в любую сетку, начиная с A79, а затем создайте протокол и увидите что получается...
Код: Выделить всё
If Sh.[A30].Text = "" Then Set x = Sh.[A1:M39] Else Set x = Sh.[A1:M78]
Мне об этом не было известно. Макрос копирует все данные, начиная с 1-й строки и заканчивая последней заполненной строкой в столбце "A".У меня с 79 строки, включая столбец "A", имеются и другие данные, которые не нужно выводить в протокол.
Сформулируйте точные требования для всех возможных вариантов и прикрепите соответствующие примеры (с теми "левыми" данными, которые не нужно копировать). Также, прикрепите лист с желаемым результатом. Похоже, что я пытаюсь решить не ту задачу, которая Вам требуется...
Я думаю, что всё получится, если указать "заканчивая" не последней заполненной строкой в столбце "A", а строкой 78 в столбце "A". Я изначально указывал, что для протокола важны данные только диапазонов A1:M39 (если на листе с которого происходит копирование ячейка A30 пустая) и A1:M78 (если на листе с которого происходит копирование ячейка A30 не пустая). A1:M39 и A1:M78 - это диапазоны 1-й и 2-ой страницы. На листах, где ячейка A30 не пустая, данные для протокола не умещаются на 1-ой странице, поэтому и указывается 2-ая страница. Со строки 79, т.е. с 3-ей страницы, могут идти и другие данные, которые не нужны ни для протокола, ни для просмотра на предмет копирования. Это как-бы рабочая зона... Если бы не ограничения по размеру загружаемого файла для вложения, я бы давно уже скинул нормальный пример. Но думаю, теперь вы поймёте, что требуется. Пример, как это должно выглядеть, я выкладывал в посте #31 (Пример6). В новом вложении добавил данные идущие со строки 79. С этой же строки могут вводится и всякие заметки по ходу поединков и т. д., которые не нужны для протокола. Для копирования так же не нужны кнопки для макросов, которые я добавил в новом вложении. Вместо формул, - значения... Ну вроде и всё... Конечный результат должен выглядеть как в примере6 из поста #31.
- Вложения
-
- Book6.3.2..zip
- (74.46 КБ) 33 скачивания
Макрос определяет количество строк для копирования, затем проверяет, уместятся ли эти строки в текущую страницу, и, в зависимости от этого принимается решение: вставлять ниже, или начиная с начала следующей страницы. Поэтому, задача состоит не в том, чтобы определить сколько страниц с данными находится на очередном листе, а в том, какое количество строк с данными требуется копировать. Например, если все данные умещаются в первых 9-ти строках ("сетка 2 уч."), то нужно проверять, уместятся ли эти строки на текущую страницу формируемого протокола. Именно 9 строк, а не все строки страницы.
Если в файле "Book6.3.2" строку заменить на , то все будет выглядеть как надо. Но, боюсь, что это опять частный случай, т. к. на листах с одной страницей тоже может быть не нужная информация ниже таблицы (в Ваших примерах такого нет).
Вопрос такой: по какому (каким) признаку можно определить последнюю строку диапазона листа с данными для копирования в протокол? Однозначно ответив на этот вопрос мы решим все проблемы.
Если в файле "Book6.3.2" строку
Код: Выделить всё
Set x = Sh.Range("A1:M" & Sh.Cells(Rows.Count, 1).End(xlUp).Row)
Код: Выделить всё
Set x = Sh.Range("A1:M" & Sh.[A78].End(xlUp).Row)
Вопрос такой: по какому (каким) признаку можно определить последнюю строку диапазона листа с данными для копирования в протокол? Однозначно ответив на этот вопрос мы решим все проблемы.