Установка ударения ChrW(769) и отслеживание

Программирование на Visual Basic for Applications
Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Установка ударения ChrW(769) и отслеживание

Сообщение Diamock » 15.11.2021 (Пн) 11:47

Здравствуйте Уважаемые!

Есть вопрос...

Реализую программную установку ударения в MS Word.
Код процедуры установки ударения.
Код: Выделить всё
Public Sub AddAcccent(VowelStress As Boolean)
    If VowelStress = True Then
        Selection.TypeText Text:=ChrW(769)
    Else
        Exit Sub
    End If
End Sub

Проверка, куда ставится ударение.
Код: Выделить всё
Public Function VowelStress(Letter As String) As Boolean
    Select Case Letter
        Case "А"
            AddAcccent True
           
        Case "а"
            AddAcccent True
           
        Case "а?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."
           
        Case "А?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."
           
        Case Else
            MsgBox "Вы пытаетесь поставить ударение на согласную букву «" & Selection.Previous.Text & "»" & " Что не предусмотренно правилами русского языка." & vbCrLf & _
            "Для установки ударения курсор должен стоять после гласной буквы.", vbOKOnly, "ГрафоманЪяк ПП. Версия: " & ProjectVersion
    End Select
   

End Function


Как исключить повторную установку ударения?
Эти фрагменты кода не обрабатывают исключения.
Код: Выделить всё
        Case "а?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."
           
        Case "А?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."
In der Beschrankung zeigt sich erst der Meister
Графоманю...

kibernetics
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 945
Зарегистрирован: 03.05.2006 (Ср) 13:31
Откуда: Minsk

Re: Установка ударения ChrW(769) и отслеживание

Сообщение kibernetics » 19.11.2021 (Пт) 2:54

Diamock писал(а):
Код: Выделить всё
Public Function VowelStress(Letter As String) As Boolean
    Select Case Letter
        Case "А"
            AddAcccent True
           
        Case "а"
            AddAcccent True
           
        Case "а?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."
           
        Case "А?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."


в бейсике можно так упростить кейс селект:
Код: Выделить всё
Public Function VowelStress(Letter As String) As Boolean
    Select Case Letter
        Case "А", "а"
            AddAcccent True
           
        Case "а?", "А?"
            MsgBox "Вы пытаетесь поставить ударение второй раз."

второе, если ты ищешь свой символ, то не надо "?",
вместо него надо
Case "A" & ChrW(769)

Михаил Орлов
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 30.09.2021 (Чт) 20:57

Re: Установка ударения ChrW(769) и отслеживание

Сообщение Михаил Орлов » 19.11.2021 (Пт) 11:11

И вам доброго здоровья.

1. У вас сильно избыточный синтаксис. Код:
Код: Выделить всё
Public Sub AddAcccent(VowelStress As Boolean)
    If VowelStress = True Then
        Selection.TypeText Text:=ChrW(769)
    Else
        Exit Sub
    End If
End Sub

Лучше заменить на:
Код: Выделить всё
Public Sub AddAcccent(VowelStress As Boolean)
    If VowelStress Then Selection.TypeText Text:=ChrW(769)
End Sub

2. Я бы сделал так (необходимо, либо выделить 1 символ, на который вы ставите ударение, либо поставить курсор перед этим символом):
Код: Выделить всё
Option Explicit

Sub MyTstSub()

Const Vowels As String = "АЕЁИОУЮЯаеёиоуюя" ' добавь, если что пропустил :-). английские гласные сюда же

Dim sSelected As String
Dim nVPos As Long

sSelected = Selection.Text

If Len(sSelected) = 2 And AscW(Right(sSelected, 1)) = 769 Then

    MsgBox "Вы пытаетесь поставить ударение второй раз."

ElseIf Len(sSelected) > 1 Then

    MsgBox "Выделите только 1 символ"

Else

    nVPos = InStr(1, Vowels, sSelected, vbBinaryCompare)
    If nVPos Then

        With Selection
            nVPos = .Start + 1
            .Start = nVPos
            .End = nVPos
            .TypeText ChrW(769)
        End With
   
    Else
        MsgBox "Вы пытаетесь поставить ударение на согласную букву ... (дальше сами напишете)"

    End If

End If

End Sub
Последний раз редактировалось Михаил Орлов 23.11.2021 (Вт) 8:56, всего редактировалось 1 раз.

Diamock
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 388
Зарегистрирован: 26.10.2009 (Пн) 4:19
Откуда: Кемерово

Re: Установка ударения ChrW(769) и отслеживание

Сообщение Diamock » 19.11.2021 (Пт) 16:17

Уважаемые! Спасибо!

Буду мучить VBA! :D
In der Beschrankung zeigt sich erst der Meister
Графоманю...


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 39

    TopList