Выделение нескольких диапазонов макросом

Автор GOGUGAN, 17 ноября 2020, 15:30

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

GOGUGAN

Добрый день, господа!

Прошу помощи в составлении следующего макроса: требуется удалить данные в нескольких диапазонах ячеек.
Составлен следующий рабочий макрос:


Sub CLEAN
Dim Doc As Object
Dim Sheet As Object
Dim Cell As Object
Doc = ThisComponent
Doc.Sheets(0).getCellRangebyName("C2:G5").clearContents(7)
Doc.Sheets(0).getCellRangebyName("B7:G10").clearContents(7)
Doc.Sheets(0).getCellRangebyName("E14:E17").clearContents(7)
Doc.Sheets(0).getCellRangebyName("G20:G23").clearContents(7)
Doc.Sheets(0).getCellRangebyName("G25:G28").clearContents(7)
End Sub


Удаление происходит в 5 этапов, возможно ли объединить указанные диапазоны одной командой и удалить данные в них в один этап?

Заранее спасибо за помощь!

bigor

#1
Если прописать
ThisComponent.LockControllers
...
ThisComponent.unLockControllers

то, для пользователя диапазоны исчезнут одномоментно :)

Хотя они и так почти сразу все вычищаются.
Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут

eeigor

#2
Цитата: GOGUGAN от 17 ноября 2020, 15:30удалить данные в нескольких диапазонах
По ссылке раздел: Group of ranges  Create and add ranges
https://wiki.documentfoundation.org/Macros/Basic/Calc/Ranges

Метод addRangeAddress
https://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sheet_1_1XSheetCellRangeContainer.html
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

sokol92

#3
Тот же метод, что и в предыдущем ответе:

Sub TestRanges
 Dim oRanges, v
 oRanges=ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
 For Each v In Array("C2:G5", "B7:G10", "E14:E17", "G20:G23", "G25:G28")
   oRanges.addRangeAddress ThisComponent.Sheets(0).getCellRangebyName(v).getRangeAddress, False ' True, если надо объединять без пересечений
 Next v  

 oRanges.clearContents(7)
End Sub


Нужно учитывать, что у сервиса SheetCellRanges палитра методов гораздо беднее, чем у сервиса SheetCellRange.
Владимир.

GOGUGAN

Господа, благодарю за ответы! Это именно то, что требовалось!

Тему можно закрывать.