Список форумов Форум Libreoffice

Форум Libreoffice

Добро пожаловать на Форум Libreoffice!
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

English French German Italian Portuguese Russian Spanish
Выделение из кода модуля Sub и Function

 
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic
Предыдущая тема :: Следующая тема  
Автор Сообщение
RFJ



Репутация: +1    

Зарегистрирован: 02.08.2011
Сообщения: 59

СообщениеДобавлено: Вс Окт 23, 2011 6:02 am    Заголовок сообщения: Выделение из кода модуля Sub и Function Ответить с цитатой

Выделить из кода модуля подпрограммы (Sub) и функции (Function) можно методом mathnew http://libreoffice.3nx.ru/viewtopic.php?t=14.

Модуль для тестирования - из него и будут выбираться Sub и Function - Module6
Код:
REM  *****  BASIC  *****

'''''''''''     1-й способ       '''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM вариант RFJ

Sub RemoveInsertModule6_RFJ
   oBLibs = BasicLibraries
   oBL = oBLibs.getByName("Standard")

REM ***** remove *****
If oBL.hasByName("Module6") Then
      MsgBox oBL.getByName("Module6")
      MsgBox "pre-remove"
   oBL.removeByName("Module6")             ' удалить модуль            Sub ... Exit Sub       
''' Макрос прекращает работу в этом месте!?
      MsgBox "remove"
End If

    s = "Sub Main6" & CHR$(10) & "MsgBox " & Str(Int(111 * Rnd)) &  CHR$(10) & "End Sub"

If Not oBL.hasByName("Module6") Then
      MsgBox "pre-insert"
    oBL.insertByName("Module6", s)
      MsgBox "insert"
End If

End Sub

''''''''''     2-й метод       ''''''''''''''''''''''''''''''''''''''''''''''''''''''''
REM вариант mathnew

Sub RemoveInsertModule6_mathnew
   oBLibs = BasicLibraries
   oBL = oBLibs.getByName("Standard")

If oBL.hasByName("Module6") Then
   oldcode=oBL.getByName("Module6")       ' старый код            Sub ... Exit Sub       
   oBL.removeByName("Module6")             
End If

    s = "Sub Main6" & CHR$(10) & "MsgBox " & Str(Int(222 * Rnd)) &  CHR$(10) & "End Sub"

If Not oBL.hasByName("Module6") Then
    oBL.insertByName("Module6", s)
   newcode=oBL.getByName("Module6")
End If

   MsgBox "     OldCode: " & Chr(10) & oldcode & Chr(10) & Chr(10) & Chr(10) & "     NewCode: " & Chr(10) & newcode

End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
''' Sub ... End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function Func666
RemoveModule
''' REM какой-то комментарий для          Sub aaa End Sub    или    Function XX End Function
InsertModule
''' REM какой-то другой комментарий для    Sub bbb End Sub      или    Function XY End Function
ReplaceModule
End Function


А это макрос, который и выбирает Sub и Function из Module6 и записывает их в отдельные документы.

Код:
Sub CodeModule6
Dim arr(0)
Dim oDoc(0)

   oBLibs = BasicLibraries
   oBL = oBLibs.getByName("Standard")

   If oBL.hasByName("Module6") Then
      codemodule=oBL.getByName("Module6")
   End If

   arr=splitstr(codemodule)

   Larr=LBound(arr)
   Uarr=UBound(arr)
   Narr=Uarr-Larr+1

   ReDim oDoc(Narr)

   Dim Args(0) As New com.sun.star.beans.PropertyValue

   For i=Larr To Uarr
      MsgBox arr(i)
   
      oDoc(i) = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Args())
      oDoc(i).Title="Standard_Module6_" & i
      
      oTextCursor = oDoc(i).Text.CreateTextCursor()
      oDoc(i).Text.insertString(oTextCursor,arr(i),False)
   Next i
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function splitstr(aStr0)

spl = Trim("@#$%^&*")

aStr0 = Replace(aStr0, Chr(10) & "End Sub", Chr(10) & "End Sub" & spl)
aStr0 = Replace(aStr0, Chr(10) & "End Function", Chr(10) & "End Function" & spl)

aStr1 = Split(aStr0, spl)

l = LBound(aStr1)
u = UBound(aStr1)

aStr = ""

splitstr=aStr1

End Function


PS. Этот макрос разбирает модули текущего документа.
Чтобы разбирать модули находящиеся в "Мои макросы" или "Макросы LibreOffice" нужно вместо BasicLibraries использовать GlobalScope.BasicLibraries.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум Libreoffice -> Basic Часовой пояс: GMT
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Вы можете бесплатно создать форум на MyBB2.ru, RSS