Новости:

Название темы должно отражать суть задачи.
Темы типа "ПОМОГИТЕ!!!", "Срочно!" и т.п. будут удаляться без объяснения причин

Главное меню

Координатное выделение

Автор Донченко Валерий, 11.08.2015, 23:27:02

« назад - далее »

Донченко Валерий

Подскажите пожалуйста, может ли кто перевести код VBA в код OpenOffice Basic? К сожалению, в программировании не силен. Нашел удачный, на мой взгляд, вариант на VBA. На форуме тема обсуждалась достаточно давно (Февраль 2012 года), поэтому создал свою тему.
Код:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Dim WorkRange As Range
   Dim wi As Window
   Set wi = ActiveWindow
   If Target.Cells.Count > 1 Then Exit Sub  'если выделено больше 1 ячейки - выходим

   Application.ScreenUpdating = False
   Set WorkRange = wi.VisibleRange 'адрес рабочего диапазона, в пределах которого видно выделение
'    Intersect(WorkRange, Target.EntireRow).Select   'формируем строку диапазон и выделяем
   Intersect(WorkRange, Union(Target.EntireRow, Target.EntireColumn)).Select 'формируем крестообразный диапазон и выделяем
   Target.Activate
End Sub

Донченко Валерий

Буду задавать наводящие вопросы  :-)
Подскажите пожалуйста значение выражения:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Дмитрий Щербаков(The_Prist)

Это событийная процедура. Т.е. данный код выполняется только после наступления определенного события. В данном случае это событие - SelectionChange, т.е. выделение ячейки/диапазона на листе.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Донченко Валерий

Значение выражения:
Dim WorkRange As Range

Дмитрий Щербаков(The_Prist)

Интересно...Вы не хотели бы азы почитать какие-то, что ли?
Что такое переменная и как правильно её объявить?
Как обратиться к диапазону из VBA
там я расписывал что это такое.
Без базовых навыков Вы эти 5 строк будете месяц постигать...Лучше книжонку какую-нибудь прочтите коротенькую.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Донченко Валерий

Безусловно хотел бы освоить азы и книжку почитать, но времени на это практически нет, да к тому же, любой новый материал легче изучать на конкретном примере и с комментариями знающего человека текст в книге понятнее  :-)

Донченко Валерий

#6
Может быть кому-нибудь пригодится:

Global oDocView, oMouseClickHandler
Sub RegisterMouseClickHandler
oDocView=ThisComponent.currentController
oMouseClickHandler=createUnoListener("MyApp_","com.sun.star.awt.XMouseClickHandler")
oDocView.addMouseClickHandler(oMouseClickHandler)
End Sub

Sub UnregisterMouseClickHandler
oDocView.removeMouseClickHandler(oMouseClickHandler)
End Sub

Sub MyApp_disposing
End Sub

Function MyApp_mousePressed(oEvt) As Boolean
MyApp_mousePressed=False
End Function

Function MyApp_mouseReleased(oEvt) As Boolean
MyApp_mouseReleased=False
on error resume next
oCell=ThisComponent.CurrentSelection
oRanges=ThisComponent.createInstance("com.sun.star.sheet.SheetCellRanges")
oCol=oCell.Columns.getByIndex(0).RangeAddress
oRow=oCell.Rows.getByIndex(0).RangeAddress
oRanges.addRangeAddresses(Array(oCell.RangeAddress,oCol,oRow),False)
ThisComponent.CurrentController.select(oRanges)
End Function


Sub Macro1

End Sub

После запуска RegisterMouseClickHandler макрос делает, то что требуется, т.е. при выделении ячейки нажатием кнопки мыши выполняет координатное выделение. Но, перемещение активной ячейки всегда снимает выделение.

Яндекс.Метрика Рейтинг@Mail.ru