Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

22 Май 2019, 08:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Вы можете задать вопрос по LibreOffice или Apache OpenOffice  без регистрации, используя форму
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1   Вниз
  Печать  
Автор Тема: Определение номера выделенной строки  (Прочитано 4173 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Nikem79
Участник
**
Offline Offline

Сообщений: 41


« Стартовое сообщение: 17 Июль 2012, 12:58 »

Есть вот такой макрос:

Код:

'Определение строки

Sub add_case
Dim oRange as Object
Dim r as Integer
oRange = thisComponent.getCurrentSelection.getRangeAddress
r = oRange.startRow
msgbox "Первая выделенная строка под номером " &r+1
End Sub


Он определяет первую выделенную строчку и выводит её сообщением

Проблема в том, что если выделять через строчно, то выходит ошибка.

Как можно избежать ошибки при выделении черезстрочно и вернуть таки значение первой выделенной строки?
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #1: 17 Июль 2012, 13:38 »

Смотря что называть "первой выделенной строкой"... Та, которую выделили первой? Или та, которая самая верхняя из всех выделенных?
Этот код показывает номер строки с "активной ячейкой":
Код:
Sub getActiveRow()
MsgBox("Активная строка (с ячейкой обведенной жирной рамкой) - " + ActiveRow(), 48, "Информмация")
End Sub

Function ActiveRow(Optional iSheet As Long, Optional oDoc As Variant) As Long
Dim arrayOfString() ' Массив текстовых строк для парсинга
Dim tmpString$ ' Временная строка
Dim oCurrentController ' Контроллер анализируемого документа
Dim oSheets As Variant ' Все листы текущей книги
Dim oSheet As Variant ' Активный (анализируемый) лист книги
REM Проверить входные параметры и установить значения по умолчанию:
If IsMissing(oDoc) Then oDoc = ThisComponent
If NOT oDoc.SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then Exit Function
oCurrentController = oDoc.getCurrentController()
If IsMissing(iSheet) Then
oSheet = oCurrentController.getActiveSheet()
iSheet = oSheet.getRangeAddress().Sheet
Else
If (iSheet < 0) Then Exit Function
oSheets = ThisComponent.getSheets()
If (iSheet >= oSheets.getCount()) Then Exit Function
oSheet = oSheets.getByIndex(iSheet)
EndIf
tmpString = oCurrentController.getViewData()
arrayOfString() = Split(tmpString, ";")
If UBound(arrayOfString) < (3 + iSheet) Then Exit Function
tmpString = arrayOfString(3 + iSheet)
If InStr(tmpString,"+") > 0 Then
arrayOfString() = Split(tmpString, "+")
Else
arrayOfString() = Split(tmpString, "/")
EndIf
ActiveRow = CLng(arrayOfString(1)) + 1
End Function
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Nikem79
Участник
**
Offline Offline

Сообщений: 41


« Ответ #2: 18 Июль 2012, 12:46 »

Макрос отлично справился со своей задачей, пристроил работает! Спасибо!

А как насчёт макроса который бы присваивал переменной имя активного листа?

Записан
Nikem79
Участник
**
Offline Offline

Сообщений: 41


« Ответ #3: 18 Июль 2012, 13:02 »

Попутно ещё понадобится замена столбцов в листе, чтоли...
Записан
JohnSUN
Капитана в тот день называли на "ты"
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Киев
Сообщений: 2 764


Помогаю людям и компьютерам понимать друг друга


WWW
« Ответ #4: 18 Июль 2012, 13:45 »

А как насчёт макроса который бы присваивал переменной имя активного листа?
Как два байта переслать:
Код:
Function NameActiveSheet() As String
Dim oCurrentController As Variant
Dim oActiveSheet As Variant
oCurrentController = ThisComponent.getCurrentController()
oActiveSheet = oCurrentController.getActiveSheet()
NameActiveSheet = oActiveSheet.getName()
End Function
Или (если лень много писать)
Код:
Function NamActSh() As String
NamActSh = ThisComponent.getCurrentController().getActiveSheet().getName()
End Function
Попутно ещё понадобится замена столбцов в листе, чтоли...
Замена на что?
Старайся не сыпать кучу разных вопросов в одну тему. А то ведь тема про выделенную строку, а вопросы и про лист, и про столбцы
Записан

Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне
Nikem79
Участник
**
Offline Offline

Сообщений: 41


« Ответ #5: 18 Июль 2012, 14:09 »

Обалдеть, работает!

Код:
Function NamActSh() As String
NamActSh = ThisComponent.getCurrentController().getActiveSheet().getName()
End Function

JohnSUN как ты это делаешь?! )))

По поводу разности тем, да, создам новую, спасибо за замечание
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!