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

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

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

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

Сообщений: 40


« Стартовое сообщение: 18 Октябрь 2019, 08:47 »

Форумчане, приветствую Вас!
В Excel несколько записанных отдельных макросов (собранных в копилке) спокойно дополняют друг друга в одном модуле путём копирования и вставки.
В LO есть записанный рекордером макрос, который водит в заданную ячейку формулу.
Работает нормально.

Есть другой макрос, который (писался отдельно) копирует ячейку и вставляет как значение.
Работает нормально.

Но как только я в код первого макроса добавляю код второго, они не работают оба...

Пытаюсь понять две вещи:
1. Почему тоже самое в Excel работает нормально а в LO нет?
2. Как всё-таки решать такую проблему LO ?
Мы ведь часто дополняем самые разные макросы другими кодами (из копилки)...
Всем Спасибо!
Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #1: 18 Октябрь 2019, 09:18 »

Механическая смесь кода может работать только случайно. Покажите исходные макросы и результат их объединения.
Записан

mikekaganski
Мастер
*****
Online Online

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 1 545


« Ответ #2: 18 Октябрь 2019, 09:21 »

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

Написание макроса - это программирование. Если какие-то две программы на одном языке программирования случайно можно состыковать без изменений в одну работающую программу, а другие две на другом языке нельзя, это ничего не говорит ни о языках, ни о программах. Каждый отдельный случай создания более сложного макроса из более простых, независимо от среды, должен решаться индивидуально. Я могу составить макросы на VBA, которые нельзя будет состыковать без изменений, и макросы на StarBasic, стыкующиеся без проблем.

Приведите пример кода, и можно будет дать конкретный совет.
Записан

С уважением,
Михаил Каганский
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #3: 18 Октябрь 2019, 10:16 »

прошу простить моё невежество... Я знаю ( по правилам форума) что в пост вставлять код неверно, но не нахожу здесь кнопки вызова поля с прокруткой
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #4: 18 Октябрь 2019, 10:32 »

не нахожу здесь кнопки вызова поля с прокруткой




* Снимок.PNG (45.16 Кб, 900x300 - просмотрено 8 раз.)
Записан
economist
Форумчанин
***
Online Online

Сообщений: 1 033


« Ответ #5: 18 Октябрь 2019, 10:44 »

Если оба макроса в Calc работают нормально - можно вызывать один макрос из другого вот так:
Код:
Sub macro1
...
Call macro2
...
End sub

----------------------------------------------

Sub macro2
...
End sub


Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #6: 18 Октябрь 2019, 10:54 »

Ай Спасибо!!!
Работает!
В Excel это выглядит как aplication run...
В LO не догадаешься так сразу.
Записан
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #7: 18 Октябрь 2019, 11:06 »

Приведите пример кода, и можно будет дать конкретный совет.

Код:
sub formula
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "=3+5*18"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())


end sub


sub vstavit
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$C$6"

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dim args3(5) as new com.sun.star.beans.PropertyValue
args3(0).Name = "Flags"
args3(0).Value = "SVD"
args3(1).Name = "FormulaCommand"
args3(1).Value = 0
args3(2).Name = "SkipEmptyCells"
args3(2).Value = false
args3(3).Name = "Transpose"
args3(3).Value = false
args3(4).Name = "AsLink"
args3(4).Value = false
args3(5).Name = "MoveMode"
args3(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args3())


end sub
Обычно, когда прописываю последовательно другие действия, создаю всегда следующий макрос, а потом в первый вставляю  до "end sub"
В данном примере тупо есть произвольно введённая формула, которую я копирую вторым макросом и вставляю как значения.
Но как только помещаю в один макрос он ругается...
« Последнее редактирование: 20 Октябрь 2019, 17:19 от Konstanta » Записан
rami
Гуру
*******
Offline Offline

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


MacBook Pro, LibreOffice и Apache OpenOffice


« Ответ #8: 18 Октябрь 2019, 11:43 »

Макрорекордер пишет макросы по шаблону, поэтому в каждом из макросов есть одинаковые строки кода. Если вы хотите объединить код нескольких макросов, нужно избавляться от дубликатов кода, это можно сделать если удалить, или переписать проблемные места.В приведённом выше коде достаточно удалить следующие строки кода (они идут подряд):
Код:
'...
end sub


sub vstavit
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
'...
Записан

Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #9: 18 Октябрь 2019, 12:02 »

можно сделать если удалить, или переписать проблемные места.
В Либре при прогоне исполнения макроса F5 он последовательно переходит к следующей проблеме.
Я верно понимаю, что достаточно будет "зарэмить" данные строки и в итоге я получу рабочий код?
Или это будет не всегда работать?
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #10: 18 Октябрь 2019, 12:08 »

Я верно понимаю, что достаточно будет "зарэмить" данные строки и в итоге я получу рабочий код?
Да, достаточно "зарэмить"
Записан
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #11: 18 Октябрь 2019, 12:11 »

Всем Спасибо!
Задачи решены
Записан
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #12: 18 Октябрь 2019, 12:12 »

Вопрос к старожилам: здесь принято закрывать тему?
в моём окне не вижу такой опции
Записан
Bigor
Опытный пользователь
***
Offline Offline

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


« Ответ #13: 18 Октябрь 2019, 12:15 »

Отредактировать название темы, добавить [Решено]
« Последнее редактирование: 18 Октябрь 2019, 12:30 от Bigor » Записан
Konstanta
Участник
**
Offline Offline

Сообщений: 40


« Ответ #14: 18 Октябрь 2019, 15:17 »

Спасибо!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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