Здравствуйте! Необходимо реализовать 2 задачи в макрос...

Автор ForumOOo (бот), 17 апреля 2015, 07:05

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

ForumOOo (бот)

Компонент: Calc
Версия продукта: 4.2.x
Сборка:  de093506bcdc5fafd9023ee680b8c60e3e0645d7
ОС: XP

Здравствуйте! Необходимо реализовать 2 задачи в макросе.
Задача 1:
Скрывать строки по значениям =0 в выделенном диапазоне ячеек столбца
одной кнопкой.
В двух листах. В обоих листах диапазон ячеек различный.
Другой кнопкой раскрывать эти строки.
Подробнее. Имеется скажем столбец с диапазоном ячеек D8-D185 на одном
листе и B6-B186 на другом листе. Для 1 кнопки: при значении ячейки
столбца=0 скрывать всю строку. Для кнопки 2: при значениях ячейки
столбца>0 показывать строку.

Задача2:
По нажатию кнопки, в новую книгу копировать заданный диапазон ячеек с
одного листа. Причем копируются только значения без формул!
Подробнее. В книге имеется несколько листов. При нажатии кнопки
открывается новая книга с одним листом и на него копируются выделенный
диапазон ячеек например A1-F100 с первого листа без формул, только
полученные значения.

--
Подпись: nivalenov
Эл. почта: nivalenov@deltateh.ru

nivalenov

Приложил документ.
На листах "смета" и "КС-2" по нажатию кнопки необходимо показать все строки столбца "количество" т.е. значения столбца >=0
И наоборот по нажатию другой кнопки на этих листах показать строки где значения столбца "количество" >0.
Включаю запись макроса, выделяю столбец, применяю фильтр. Пишется только выделение. Помогите.


Также хотелось бы при нажатии кнопки открывать новую книгу и копировать в нее выделенные значения листа "смета" A1:G732 (без формул только полученные результаты.
Это вообще не представляю как сделать. ???

rami

Цитата: nivalenov от 20 апреля 2015, 07:00На листах "смета" и "КС-2" по нажатию кнопки необходимо показать все строки столбца "количество" т.е. значения столбца >=0
И наоборот по нажатию другой кнопки на этих листах показать строки где значения столбца "количество" >0.
Вам всё понятно из процитированного?
Цитата: nivalenov от 20 апреля 2015, 07:00Включаю запись макроса, выделяю столбец, применяю фильтр. Пишется только выделение. Помогите.
Макрос не нужен. Выделяйте не весь столбец, а нужный диапазон от ячейки D9(это будет заголовок диапазона с кнопкой фильтра) до D710 (если я правильно понял нижнюю границу диапазона). Раскрыв выпадающее меню фильтра вы увидите список значений фильтрации и две нужные вам кнопки(в красной рамке на снимке "Кнопки фильтра"). Левая кнопка "Показать только текущий элемент" , правая "Скрыть только текущий элемент". По умолчачию всегда выделен первый элемент списка — в нашем случае 0
Цитата: nivalenov от 20 апреля 2015, 07:00Также хотелось бы при нажатии кнопки открывать новую книгу
Это делается шорткатом. См. снимок "Кнопка нового листа"
Цитата: nivalenov от 20 апреля 2015, 07:00и копировать в нее выделенные значения листа "смета" A1:G732 (без формул только полученные результаты.
В адресном окне раскрываете список именованных диапазонов и выбираете нужный, он выделится, копируете, переключаетесь в новый документ и в меню "Правка" жмёте "Вставить как...". см. снимки

nivalenov

Спасибо!


Цитата: nivalenov от 20 апреля 2015, 07:00Включаю запись макроса, выделяю столбец, применяю фильтр. Пишется только выделение. Помогите.
Макрос не нужен. Выделяйте не весь столбец, а нужный диапазон от ячейки D9(это будет заголовок диапазона с кнопкой фильтра) до D710 (если я правильно понял нижнюю границу диапазона). Раскрыв выпадающее меню фильтра вы увидите список значений фильтрации и две нужные вам кнопки(в красной рамке на снимке "Кнопки фильтра"). Левая кнопка "Показать только текущий элемент" , правая "Скрыть только текущий элемент". По умолчачию всегда выделен первый элемент списка — в нашем случае 0
Я впринципе так и работаю. Просто хотелось бы ускорить нажатием кнопочки. Возможно это делать через макрос?
Цитата: nivalenov от 20 апреля 2015, 07:00Также хотелось бы при нажатии кнопки открывать новую книгу
Это делается шорткатом. См. снимок "Кнопка нового листа"
Цитата: nivalenov от 20 апреля 2015, 07:00и копировать в нее выделенные значения листа "смета" A1:G732 (без формул только полученные результаты.
В адресном окне раскрываете список именованных диапазонов и выбираете нужный, он выделится, копируете, переключаетесь в новый документ и в меню "Правка" жмёте "Вставить как...". см. снимки
[/quote]
Спасибо, про выделенные значения не знал. Но опять же хотелось бы делать все в один клик. Такое возможно?

rami

То, что вы цитируете только себя любимого — это здорово, но то, что вы отвечаете моими словами на ваши цитаты — это уже тянет на плагиат ;D

Цитата: nivalenov от 20 апреля 2015, 09:00Просто хотелось бы ускорить нажатием кнопочки. Возможно это делать через макрос?
Можно, см. документ "эксперимент с кнопками.ods"
Цитата: nivalenov от 20 апреля 2015, 09:00Но опять же хотелось бы делать все в один клик. Такое возможно?
В принципе тоже можно, если знать все подробности что именно копировать, но думаю лучше и проще делать это в ручную.

nivalenov

простите, с цитатами, я не опытный пользователь форумов )
и спасибо за помощь!

nivalenov

Решил сделать по-другому. Это я про задачу 2. Выделенный фрагмент сразу экспортировать в PDF, этот макрос легко записывается, вот только экспортирует весь документ и код какой-то страшный)). подскажите как прописать параметры для экспорта выделенной области?


sub Main
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 = "_xlnm.Print_Area (Смета)"

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

rem ----------------------------------------------------------------------
dim args2(2) as new com.sun.star.beans.PropertyValue
args2(0).Name = "URL"
args2(0).Value = "file:///C:/Documents%20and%20Settings/%D0%90%D0%BD%D0%B4%D1%80%D0%B5%D0%B9%20%D0%9D%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D0%BE%D0%B2/%D0%A0%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9%20%D1%81%D1%82%D0%BE%D0%BB/%D1%8D%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D1%82.pdf"
args2(1).Name = "FilterName"
args2(1).Value = "calc_pdf_Export"
args2(2).Name = "FilterData"
args2(2).Value = Array(Array("UseLosslessCompression",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Quality",0,90,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ReduceImageResolution",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("MaxImageResolution",0,300,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTaggedPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SelectPdfVersion",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportNotes",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ViewPDFAfterExport",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarks",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenBookmarkLevels",0,-1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("UseTransitionEffects",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsSkipEmptyPages",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("IsAddStream",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FormsType",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportFormFields",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("AllowDuplicateFieldNames",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerToolbar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerMenubar",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("HideViewerWindowControls",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ResizeWindowToInitialPage",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("CenterWindow",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("OpenInFullScreenMode",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("DisplayPDFDocumentTitle",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialView",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Magnification",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Zoom",0,100,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PageLayout",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("FirstPageOnLeft",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("InitialPage",0,1,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Printing",0,2,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Changes",0,4,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableCopyingOfContent",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EnableTextAccessForAccessibilityTools",0,true,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportLinksRelativeFsys",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PDFViewSelection",0,0,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ConvertOOoTargetToPDFTarget",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("ExportBookmarksToPDFDestination",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignPDF",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("_OkButtonString",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Watermark",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("EncryptFile",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPasswords",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("RestrictPermissions",0,false,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("PreparedPermissionPassword",0,Array(),com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("Selection",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureLocation",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureReason",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureContactInfo",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignaturePassword",0,"",com.sun.star.beans.PropertyState.DIRECT_VALUE),Array("SignatureCertificate",0,,com.sun.star.beans.PropertyState.DIRECT_VALUE))

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


end sub

nivalenov

Уважаемый rami, как отредактировать ваш макрос чтобы фильтровал до 713 строки, а не до 710. Никак не могу понять.

rami

В меню "Вставка" —> "Названия" выберите "Управление...", в открывшемся окне замените 0 на 3, как на снимке: