Доступ к кнопке на листе из модуля basic

Автор quarantine85, 17 апреля 2020, 11:52

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

quarantine85

Добрый день!

Не могу нигде найти как получить доступ к кнопке, которая расположена на листе.

Есть кнопка Button1 на листе Sheet1. При нажатии на эту кнопку выполняется макрос, из которого нужно сделать ее Enabled = false.

Подскажите, пожалуйста, куда копать?

rami

Образец документа с кнопкой и макросом покажите?

rami

В общем так:
Sub Main(event)       'макрос назначенный кнопке
event.Source.Model.Enabled = false
End Sub

quarantine85

Цитата: rami от 17 апреля 2020, 12:21
В общем так:
Sub Main(event)       'макрос назначенный кнопке
event.Source.Model.Enabled = false
End Sub


Спасибо сработало.
А как получить доступ к другой кнопки?

Скажем есть Button1 и Button2
Нажал Button1 а в макросе управляем доступностью button2.

rami

Тогда так:
Sub Main
ThisComponent.DrawPages.getByIndex(0).getByIndex(0).Control.Enabled = false
End Sub


но нужно будет проверить что получен нужный объект.

quarantine85


eeigor

Как проверить кнопку?
oShape = oSheet.DrawPage.getByIndex(i)
      If oShape.supportsService("com.sun.star.drawing.ControlShape") Then
Ubuntu 18.04 LTS • LibreOffice 7.5.1.2 Community

rami

Я имел в виду, что когда получают элемент по индексу нужно проверять то ли мы получили что хотели, если будут удалены элементы перед искомым, то его индекс изменится и мы получим по индексу другой элемент или ошибку индекса. Проверять нужно по имени, т.к. по сервису можем получить другой объект того же типа.

Можно также получить доступ по имени:
Sub Main
Dim oDrawPage, oForm, oButt
oDrawPage = ThisComponent.DrawPages.getByIndex(0)
oForm = oDrawPage.Forms.getByName("Форма")
oButt = oForm.getByName("Кнопка 1")
End Sub


Как видно, вариантов несколько, выбирать нужно подходящий.

Tillevion

Подскажите, а как можно изменить размеры и положение кнопки на листе? Например, PositionY.

rami

Пробуйте:
Sub Main
Dim oDrawPages, oPage, oShape
Dim oSize As New com.sun.star.awt.Size
Dim oPos As New com.sun.star.awt.Point
oDrawPages = ThisComponent.DrawPages
oPage = oDrawPages.getByIndex(0)
oShape = oPage.getByIndex(0)

oSize.Width = 4500
oSize.Height = 2250
oShape.setSize(oSize)

oPos.X = 1500
oPos.Y = 2500
oShape.setPosition(oPos)

End Sub

Tillevion