Найти нужное значение в таблице по условию

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Файл "Book6.2" из поста №35 это оно и есть...
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Лист "Сетка (8 уч.)" скопировался не сначала страницы... Из-за этого не уместился на нём лист "Сетка (4 уч.)" (не хватило как раз одной строки).
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Разрыв в одну строку не нужен, если следующий копируемый лист не умещается на странице...
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

В коде макроса в файле из поста №35 "Book6.2" строку

Код: Выделить всё

i = Cells(Rows.Count, 1).End(xlUp).Row + 2
замените на

Код: Выделить всё

i = Cells(Rows.Count, 1).End(xlUp).Row + 1
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Теперь разрыва нет между "Сетка (8 уч.)" и "Сетка (4 уч.)". Разрыв нужен, если данные страниц копируемых листов с разрывом в одну строку между собой умещаются на одной странице, если не умещаются, то разрыв между ними не нужен...
И как сделать чтобы не копировались кнопки макросов с копируемых листов...
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Вроде разобрался. Смотрите. Проверяйте...
Теперь все объекты (кнопки, флажки и т. п.) из листов со скобками копируются на лист "Протокол поединков" вместе с данными, а после копирования удаляются.
Вложения
Book6.3..zip
(70.05 КБ) 135 скачиваний
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Да, в примере Book6.3 всё так, но код в нём теперь, как я понял, просматривает листы на предмет копирования полностью, т.к. нет строки:

Код: Выделить всё

If Sh.[A30].Text = "" Then Set x = Sh.[A1:M39] Else Set x = Sh.[A1:M78]
У меня с 79 строки, включая столбец "A", имеются и другие данные, которые не нужно выводить в протокол. А при новом коде он и их затрагивает, и информация выводится совсем не так как нужно... Для наглядности, просто скопируйте любую таблицу и вставьте её в любую сетку, начиная с A79, а затем создайте протокол и увидите что получается...
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

У меня с 79 строки, включая столбец "A", имеются и другие данные, которые не нужно выводить в протокол.
Мне об этом не было известно. Макрос копирует все данные, начиная с 1-й строки и заканчивая последней заполненной строкой в столбце "A".
Сформулируйте точные требования для всех возможных вариантов и прикрепите соответствующие примеры (с теми "левыми" данными, которые не нужно копировать). Также, прикрепите лист с желаемым результатом. Похоже, что я пытаюсь решить не ту задачу, которая Вам требуется...
VanBlack
Сообщения: 69
Зарегистрирован: 26 окт 2013, 15:28

Я думаю, что всё получится, если указать "заканчивая" не последней заполненной строкой в столбце "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 скачивания
SAS888
Сообщения: 156
Зарегистрирован: 16 янв 2008, 08:28

Макрос определяет количество строк для копирования, затем проверяет, уместятся ли эти строки в текущую страницу, и, в зависимости от этого принимается решение: вставлять ниже, или начиная с начала следующей страницы. Поэтому, задача состоит не в том, чтобы определить сколько страниц с данными находится на очередном листе, а в том, какое количество строк с данными требуется копировать. Например, если все данные умещаются в первых 9-ти строках ("сетка 2 уч."), то нужно проверять, уместятся ли эти строки на текущую страницу формируемого протокола. Именно 9 строк, а не все строки страницы.
Если в файле "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)
, то все будет выглядеть как надо. Но, боюсь, что это опять частный случай, т. к. на листах с одной страницей тоже может быть не нужная информация ниже таблицы (в Ваших примерах такого нет).
Вопрос такой: по какому (каким) признаку можно определить последнюю строку диапазона листа с данными для копирования в протокол? Однозначно ответив на этот вопрос мы решим все проблемы.
Ответить