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

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

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

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

Сообщений: 48


« Стартовое сообщение: 5 Ноябрь 2020, 16:06 »

Здравствуйте. У меня вот такая задача. Я работаю в Калке, ввожу текст в ячейку. Можно ли, сделать так, чтобы после нажатия клавиши Enter запускался макрос и удалял из только что активной ячейки одно, двух и трёхсложные слова. Спасибо.
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 019


« Ответ #1: 5 Ноябрь 2020, 16:17 »

А вы можете сформулировать правило, по которому макрос будет определять такие слова?
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
radius
Участник
**
Offline Offline

Сообщений: 48


« Ответ #2: 5 Ноябрь 2020, 16:26 »

Все слова, состоящие из 1, 2 и 3 букв без исключений. В любом месте ячейки. В любом регистре. Латиницы не будет. Цифры игнорируются. Не знаю, какие еще можно придумать критерии.
Записан
Bigor
Мастер
*****
Offline Offline

Пол: Мужской
Сообщений: 1 019


« Ответ #3: 5 Ноябрь 2020, 16:37 »

наверное гласных букв, и то по недавней теме с переносами, там наверняка куча исключений.
Записан

Поддержать разработчиков LibreOffice можно можно тут, а наш форум вот тут
radius
Участник
**
Offline Offline

Сообщений: 48


« Ответ #4: 5 Ноябрь 2020, 16:54 »

Любых букв (и гласных и согласных) в любом порядке. Например - "ккк" "хмм" "ора" и т.д. Без исключений.
« Последнее редактирование: 5 Ноябрь 2020, 17:37 от radius » Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 229


WWW
« Ответ #5: 5 Ноябрь 2020, 18:57 »

Если правильно понял условия задачи. Добавьте следующий модуль в библиотеку Standard документа (или приложения). Далее, правая кнопка по ярлыку листа, События листа и на событие "Содержимое изменено" назначьте макрос DelShortWords.
Код:
Option Explicit
' обработка события листа "Содержимое изменено"
Sub DelShortWords(oEvent)
 With oEvent
   If .supportsService ("com.sun.star.sheet.SheetCell") Then ' изменена одна ячейка
     If .CellContentType=2 Then                              ' в ячейке текст
       .String=DelShortWordsStr(.String)   
     End If
   End If   
 End With 

End Sub

' удаляет из строки s слова из 1-3 букв
Function DelShortWordsStr(ByVal s) As String
  Dim result As String, v, i As Long, bDel As Boolean
 
  For Each v In Split(s)
    If v<>"" Then
      If len(v)<=3 Then
        bDel=True
        For i=1 To len(v)
          If ucase(mid(v,i,1))=lcase(mid(v,i,1)) Then   ' символ не является буквой
            bDel=False
            Exit For
          End If 
        Next i
      Else
        bDel=False
      End If       
      If Not bDel Then
        result=IIf(result="", "", result & " ") & v
      End If 
    End If 
  Next v
 
  DelShortWordsStr=result
End Function
Записан

Владимир.
radius
Участник
**
Offline Offline

Сообщений: 48


« Ответ #6: 5 Ноябрь 2020, 21:32 »

Огромное спасибо, попробовал - работает!
Записан
Страниц: 1   Вверх
  Печать  
 
Перейти в:  

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