Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
26.11.2022, 15:18:57

Войти
Добавляйтесь в нашу группу ВКонтакте - будьте в курсе всех новых событий сайта, узнавайте первым обо всех акциях и новых статьях!
32 868 Сообщений в 5 359 Тем от 6 520 Пользователей
Последний пользователь: chernobyrka
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по OpenOffice и LibreOffice
| | |-+  Координатное выделение
Страниц: [1]   Вниз
Печать
Автор Тема: Координатное выделение  (Прочитано 16226 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Донченко Валерий
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« : 11.08.2015, 23:27:02 »

Подскажите пожалуйста, может ли кто перевести код VBA в код OpenOffice Basic? К сожалению, в программировании не силен. Нашел удачный, на мой взгляд, вариант на VBA. На форуме тема обсуждалась достаточно давно (Февраль 2012 года), поэтому создал свою тему.
Код:
Код: (vb)
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
« Последнее редактирование: 11.08.2015, 23:36:09 от vikttur » Записан
Донченко Валерий
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #1 : 12.08.2015, 21:40:15 »

Буду задавать наводящие вопросы  :-)
Подскажите пожалуйста значение выражения:
Код: (vb)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +481/-0
Офлайн Офлайн

Сообщений: 5 707



Просмотр профиля WWW
« Ответ #2 : 12.08.2015, 21:43:22 »

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Донченко Валерий
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #3 : 12.08.2015, 21:49:47 »

Значение выражения:
Код: (vb)
Dim WorkRange As Range
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +481/-0
Офлайн Офлайн

Сообщений: 5 707



Просмотр профиля WWW
« Ответ #4 : 12.08.2015, 21:52:42 »

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

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
Донченко Валерий
Новичок
*

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #5 : 12.08.2015, 22:04:36 »

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

Репутация: +1/-0
Офлайн Офлайн

Сообщений: 5


Просмотр профиля
« Ответ #6 : 15.08.2015, 12:45:12 »

Может быть кому-нибудь пригодится:
Код: (vb)

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 макрос делает, то что требуется, т.е. при выделении ячейки нажатием кнопки мыши выполняет координатное выделение. Но, перемещение активной ячейки всегда снимает выделение.
« Последнее редактирование: 15.08.2015, 12:47:46 от Донченко Валерий » Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru