Копировать с помощью макроса на другой лист

Автор lyolikfx, 20 января 2011, 10:34

0 Пользователи и 1 гость просматривают эту тему.

JohnSUN

Вот, сколько людей - столько и мнений...
Последнюю строку найти или от текущей клетки вправо выделение растянуть - для меня, например, семечки (знаю, где у Питоньяка нужную цитату дёрнуть)
А вот перебрать все имеющиеся выделения, если их больше одного, да еще и использовать не полностью, а только ячейки из первого столбца выделения... Да проверить, что когда двигаемся вправо эта ячейка была не предпоследней в строке (в смысле, не в самом конце строки - а то ведь ругнется макрос-то)... Нет, сделаю, конечно... Но столько нужно предусмотреть!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lyolikfx

Ув. JohnSUN, несмотря на то что макрос ещё не готов, я уже хочу поставить вам пиво :)
Может, это даже и получится как-то организовать.

lyolikfx

Цитата: JohnSUN от 21 января 2011, 14:02Не понял насчет "а потом данные изменились"... Когда изменились и с какого перепугу?
Сформаровал значить список, звонок, "мне то ненадо, надо другое".


Не, всё-таки макрос - наилучший вариант.

JohnSUN

Легко! В окне редактирования сообщения есть специальный смайлик!  :beer:

Цитата: lyolikfx от 21 января 2011, 16:27
Сформаровал значить список, звонок, "мне то ненадо, надо другое".
А, я испугался, что весь исходный список может поменяться... Это просто: нужные позиции в Исходных отметил, не нужные почистил и готово.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lyolikfx

Ех, попробовал, не мое это. Буду ещё искать варианты так, чтоб с макросом, привык я. Но спасибо за участие.

JohnSUN

Ты далеко не уходи... Пишем мы его... Сегодня, скорее всего, не закончим, но на днях - обязательно.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lyolikfx

...внутрь ему, если мужчина, если же нет - растереть...  :)  правда с качкой у них перебор там, штормы, от вахт не вздохнуть, но человеку за бортом сдесь не дадут утонуть........

JohnSUN

Цитата: convas от 21 января 2011, 16:08
2. Вставлять после (ниже) уже заполненных ранее ячеек.
В этом большая часть трудностей.
Не велика беда... Ну нет в бэйсике конструкции аналогичной VBA'шной .End(xlUp), ну и что?
Я уже цитировал макрос Johnny Rosenberg GetLastUsedRow
Воткнуть эту функцию вместо "B1:C2" в
Цитата: Клио от 21 января 2011, 13:48Sub Main
ThisComponent.Sheets.getByName("Лист2").getCellRangeByName("B1:C2").setDataArray(ThisComponent.Sheets.getByName("Лист1").getCellRangeByName("A1:B2").DataArray)
End Sub
тоже не сложно. Плохо, что:
1. вызываться в этом случае она будет дважды на каждом копировании (чтобы указать целевой диапазон нужно будет и для StartRow и для EndRow её указать). Впрочем, если копировать не через getDataArray-setDataArray, а как convas предложил, через .copyRange (CellAddress, CellRangeAddress) тогда можно одним вызовом обойтись.
2. строчка станет длиннющей - не читаемая, не отлаживаемая, не исправляемая...
А если еще и текст самой GetLastUsedRow в одну строку растянуть - вообще беда...
Нет, лучше пусть макрос будет из нескольких процедур и функций, пусть он будет хоть из 50 строк, хоть из 100, но строчки будут короткие, ясные для понимания...
Допишу-отлажу, как задумал, покажу.

Я смотрю, пример прайса без макроса еще кто-то скачивал? Тоже не понравилось?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

JohnSUN

Вообще-то, "обещанного три года ждут", но я управился чуть быстрее  ;D
Но ощущение, что что-то осталось недоделанным, что-то не досмотрел, что-то упустил всё-таки есть.

Получилось довольно-таки многословно, на макрос из одной строки, который был в топикстарте, похоже мало.
Просто насовал в алгоритм пачку "фич", которые вряд ли кому-нибудь когда-нибудь понадобятся для прайс-листа, но могут пригодиться как "code snippets".

На мышь или на горячие клавиши вызовы макросов не вешал, их можно запускать кнопками на листе "Исходные" или по Alt-F11. Или навесить на хоткеи, или вывести на панель...


[вложение удалено Администратором]
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lyolikfx

Ув. JohnSUN, весьма вам благодарен, на скорую руку говорю спасибо, а гдето завтра посмотрю и вынесу резолюцию ;D. Ещё раз спасибо.

lyolikfx

Вот это да. То что надо. Огромное спасибо вам JohnSUN.

Я думаю, огромное количество людей будут вам благодарны.

lyolikfx

 :(
Произошла, маленькая заминка. Хочут этот макрос применить для других документов, и в последствии при выполнении его выбрасывает ошибку.

JohnSUN

Можешь чуть подробнее про ошибку? Какая ошибка, в каком месте? Пока не забыл, что там понаписывал - могу поправить.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

lyolikfx

Наконец-то добрался до компутера. Вообщем я лучше сформулирую вопрос по другому, как правильно применить данный макрос к любому другому документу формата xls или аналога ОпенОфис?

JohnSUN

Последовательность действий такая:
1) Открыть ПримерМакросаДляПрайса_1.ods
2) Выбрать команды меню Сервис - Макросы - Управление макросами - OpenOffice.org Basic
3) Нажать кнопку "Управление"
4) В открывшемся окне развернуть модули документа ПримерМакросаДляПрайса_1.ods-Standard
5) Зажать клавишу Ctrl и перетащить мышью модуль CopyDataToAnotherSheet в библиотеку Мои макросы-Standard. Кнопка "Закрыть".
6) Записать любым удобным способом в какой-либо модуль в Мои макросы-Standard процедуру, которая будет вызывать CopyDataToTargetSheet из только что скопированного модуля с нужными параметрами. Например, так:
Sub CopyToPrice()
Const sName = "Прайс1" ' Если потребуется сменить имя листа — меняем в этом месте
CopyDataToTargetSheet(sName, 3, 2, False)
End Sub

7) Назначить для вызова этой процедуры сочетание клавиш или кнопку на панели инструментов.

Понимаю, что п.6 расписан недостаточно подробно, но сейчас не могу придумать простых слов, чтобы его объяснить. Если возникнут трудности - лучше переспроси, ладно?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне