Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

15 Декабрь 2019, 05:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 3 4 »   Вниз
  Печать  
Автор Тема: Макрос и Номера листов  (Прочитано 6038 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Стартовое сообщение: 12 Февраль 2019, 16:59 »

Доброго всем времени..
Подскажите как  мне лучше написать макросом подобное..
Есть в Лист1, Лист2, Лист3, Лист4 ...... и т.д.
Причем  кол-во листов может быть разное.
Простым макросом я сделал так что нужные данные собираются на Листе1 из Лист2, Лист3, Лист4,
И этим макросом  нужно собрать данные на Листе2.... И вот тут проблема в том, что в макросе четко указаны в формуле Лист1 , Лист2, Лист 3 ...и т.д. , а нужно так чтобы не зависеть от номера листов и их кол-во в книге.... ))...
вот пример кусок макроса:

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "=ЕСЛИОШИБКА(ВПР(C11;Лист2.C$9:G$280;5;0);"""
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$L$11"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "StringName"
args4(0).Value = "=ЕСЛИОШИБКА(ВПР(C11;Лист3.C$9:G$280;5;0);"""
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$N$11"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())

rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "StringName"
args6(0).Value = "=ЕСЛИОШИБКА(ВПР(C11;Лист4.C$9:G$280;5;0);"""
dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args6())

и нужно чтобы тут не Жестко ЛИСТ2  ,а так что если текущий лист, на котором стоишь, уже ЛИСТ2, то значить в формуле будет ЛИСТ1, лист 3, лист4 и т.п.)))
Записан
Rafik
Форумчанин
***
Offline Offline

Сообщений: 96


« Ответ #1: 13 Февраль 2019, 08:44 »

Не совсем понятна задача. Насколько я понял:
1. имеется энное количество листов в книге
2. необходимо снабдить формулами активный лист, где в формулах будут фигурировать все остальные листы.
Можно попытаться сгенерить формулы так:

rem Получаем количество листов в текущем документе
listov = ThisComponent.getSheets().count
rem Получаем имя активного листа
imya = ThisComponent.CurrentController.getActiveSheet.Name
rem далее обходим в цикле листы и генерим формулу с именем каждого листа
for ii = 0 to listov - 1
    list = ThisComponent.Sheets(ii)
    rem будем брать только те листы, чьё имя не совпадает с активным
    if list.Name <> imya Then
        
         rem Соберём формулу в переменную
         formula1 =  "=ЕСЛИОШИБКА(ВПР(C11;" + list.Name + ".C$9:G$280;5;0);"")"

         rem сюда кусок макроса, отвечающего за заполнение ячейки и т.д.
         rem вместо строки: args2(0).Value = "=ЕСЛИОШИБКА(ВПР(C11;Лист2.C$9:G$280;5;0);"")"
         rem подставить такую: args2(0).Value = formula1

    end if
Next


« Последнее редактирование: 13 Февраль 2019, 08:46 от Rafik » Записан
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #2: 13 Февраль 2019, 13:23 »

Спасибо за ответ...  
Да вы правильно поняли задачу..   Попробую это все прописать , отпишусь по результату!!

тут момент еще небольшой.. мне нужно эту формулу прописать столько сколько этих листов в книге, кроме активного.
а результат записывается в каждый столбец. Столбцы и указываю в макросе в примере..
« Последнее редактирование: 13 Февраль 2019, 13:29 от ink-service » Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 775


« Ответ #3: 13 Февраль 2019, 16:14 »

Было бы намного проще понять, что вам нужно, если бы приложили файл и написали, что куда копировать
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #4: 13 Февраль 2019, 17:54 »

Неужели не понятно? Нужно консолидировать данные из нескольких счетов - каждый счет на отдельном листе. Подсчитывается суммарная выручка... если не ошибаюсь, конечно - первая колонка, скорее всего, номер по порядку, затем артикул, наименование, цена, количество, видимо, наценка или пересчет по курсу, и, наконец, в колонке G сумма по строке - вот её-то и нужно вынуть из каждого листа для каждого наименования и вставить в отдельную ячейку начиная с колонки K. В конце строки, скорее всего, будет =СУММА()

В общем, сначала максимально усложнить создание сводной таблицы, а затем создать её с помощью формул, которые вписывать макросом в текущий лист...
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #5: 13 Февраль 2019, 20:27 »

Прикладываю файлик.
В нем как пример три листа. Но может быть и больше, получаются они однотипные.
Встаем на текущий Лист1 и делаем выполнить макрос (он также в документе).
в итоге получаю с Листа2 и Листа3 данные на листе 1.
Теперь хочу встать на Лист2 нажать кнопку выполнить макрос и получить данные с Листа1 и Листа3. также в колонках..
и точно также  если встать на Листе3, то нажать опять тотже макрос и получить данные с Листа1 и Листа2....
ну и в  том же духе если есть Лист4,5,6 .т.п.

Тот что макрос там вписан, я набросал его методом записи.. т.к. в этом пока я плохо понимаю.

* Пример.ods (48.32 Кб - загружено 5 раз.)
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 775


« Ответ #6: 13 Февраль 2019, 21:16 »

Теперь хочу встать на Лист2 нажать кнопку выполнить макрос и получить данные с Листа1 и Листа3.
переименовываем лист2 в лист1, лист1 в лист2 и не надо ничего дописывать Улыбка
Записан
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #7: 13 Февраль 2019, 21:18 »

)) на данный момент так и делаю))  ручками, но если листов 10, то каждый переименовывать??... уже немного геморойно)..
Хочется  встать на лист нажать кнопку - и все макрос все сделал..
а еще лучше сразу на всех листах книги)
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #8: 13 Февраль 2019, 21:26 »

нажать кнопку - и все макрос все сделал..
"Всё сделал" - формулы вписал? Или "всё сделал" - выдал список всех упомянутых штрихкодов со всеми известными ценами и с пометкой "это дешевле в ФАЙН, а самое дорогое в ДОН2"?
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #9: 13 Февраль 2019, 21:45 »

вообще мне бы хотелось  просто в моем макросе , в формулах что там написаны менялись Названия Листа.
Для всех листов формулы одни, но с листов разных собираются данные по ним.
например:
текущий лист1,  значит в формуле будет Лист2,  Лист3, Лист4.
текущий лист2,  значит в формулах будет Лист1, Лист3, Лист4
Текущий лист3,  значит в формулах будет Лист1, Лист2, Лист4


как это можно сделать?..
Вообще  почти что надо  предложил уважаемый Rafik
но ... не могу до конца применить это к своим хотелкам..т.к. в моем кривом макросе там ставятся формулы а потом копируются они  в низ.. (((
Записан
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #10: 13 Февраль 2019, 21:47 »

"Всё сделал" - формулы вписал?
наверное мне ближе это.. тк. чтобы я мог потом если что-то нужно -поменять сам, в формуле... 
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 775


« Ответ #11: 14 Февраль 2019, 00:08 »

смотри что получилось

зы только у меня формулы английские, или включи у себя английские или измени в макросе

* CopyList_1.ods (57.4 Кб - загружено 8 раз.)
« Последнее редактирование: 14 Февраль 2019, 00:11 от Bigor » Записан
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #12: 14 Февраль 2019, 01:00 »

смотри что получилось
Вы волшебник)..   то что надо...  спасибо огромное)..
А можно еще немного понаглеть и спросить как тутже еще можно ли дописать в макросе условное форматирование..
Я делаю ручками так в каждом листе:
Выделяю колонку В - Условное форматирование - Значение ячейки=Повторяющиеся - Стиль применяю например Accent3 (или просто выделить желтым фоном например)...
Т.е. тем самым еще нужно увидеть на каждом листе если ли повторяющиеся товары...
Записан
Bigor
Опытный пользователь
***
Offline Offline

Пол: Мужской
Сообщений: 775


« Ответ #13: 14 Февраль 2019, 10:42 »

дописать в макросе условное форматирование..

* CopyList_2.ods (56.64 Кб - загружено 13 раз.)
Записан
ink-service
Участник
**
Offline Offline

Сообщений: 36


« Ответ #14: 14 Февраль 2019, 15:40 »

Спасибо))
Но в листе УФ получается  работает сразу, при открытии листа, как будто всегда включено))).
Скопировал код просто в "Мои макросы" чтобы применять при нажатии на кнопку.. НО при выполнении выдает ошибку "Ошибка времени выполнения Basic. Аргумент является обязательным."

мне бы хотелось чтобы это условное форматирование и то что сделано  первым  было в одном макросе), чтобы нажать кнопку одну,  и все разом по листам сделалось).))) - если можно))..
Записан
Страниц: 1 2 3 4 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!