Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2010, 01:48   #1
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию VBA Переносы

Привет всем!
Решаю задачу но исчерпав свое знанию в VBA нужного результата не добился, надеюсь на ваши советы:

В общем написал вот такой код


Private Sub cmd_Click()
Dim i, j, k1, k2 As Integer
Dim S, D, G As String
Dim Glasnie, Soglasnie As Variant

'Массив гласных
Glasnie = Array(ChrW(4304), ChrW(4308), ChrW(4312), ChrW(4317), ChrW(4323))

'Массив согласных
Soglasnie = Array(ChrW(4305), ChrW(4306), ChrW(4307), ChrW(4309), ChrW(4310), ChrW(4311), ChrW(4313), ChrW(4314), ChrW(4315), ChrW(4316), ChrW(4318), ChrW(4319), ChrW(4320), ChrW(4321), ChrW(4322), ChrW(4324), ChrW(4325), ChrW(4326), ChrW(4327), ChrW(4328), ChrW(4329), ChrW(4330), ChrW(4331), ChrW(4332), ChrW(4333), ChrW(4334), ChrW(4335), ChrW(4336))

i = 3
j = 1

Set myRange = ActiveDocument.Range

Do While S <> " "
' text S L
S = Mid(myRange, i, 1) ' Перед двумя символами
D = Mid(myRange, j, 1)

Тут переменная "S" Бдет в переди двумя символами чем "D" и с помощью этой переменной буду определять координаты куда вставить знак перенося.

For k2 = 0 To 27 'Цыкл выявления согласных
If S = Soglasnie(k2) Then
MsgBox ("b")
G = G + "b"
Exit For
End If
Next

For k1 = 0 To 4 'Цыкл выявления гласных
If S = Glasnie(k1) Then
G = G + "a"
MsgBox ("a")
Box1.Text = S
Exit For
End If
Next


Вот в здесь уже должна вставляться знак переноса если...
ba-ba, bab-ba ba-aba Ну тому подобное


И последный код который я не смог сформулировать...
If G = "baba" Then
Mid(myRange, j, 1) = Mid(myRange, j, 1) + "-"
G = ""
End If


i = i + 1
j = j + 1

Box3.Text = G

Loop


End Sub

Может я все делаю очень сложно?

P.S.
Заранее спасибо
chugo вне форума Ответить с цитированием
Старый 28.06.2010, 16:30   #2
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

а зачем реализовывать такую вещь на вба ? расстановка перенос стандартная ведь функция в word например
bdfy вне форума Ответить с цитированием
Старый 28.06.2010, 20:06   #3
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от bdfy Посмотреть сообщение
а зачем реализовывать такую вещь на вба ?
тк переносы я хочу сделать Для Грузинского языка.

До нас microsoft Пока не дошел!
chugo вне форума Ответить с цитированием
Старый 28.06.2010, 20:33   #4
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

добавление локали новой с переносами, орфографией, грамматикой - должно быть стандартной задачей. я бы в эту сторону и копал.
bdfy вне форума Ответить с цитированием
Старый 30.06.2010, 03:30   #5
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию

Код:
Mid(myRange, j, 1) = Mid(myRange, j, 1) + "-"
Вместо "-" используй ChrW(30) или Chr(30) (мягкий перенос: ¬).

Иначе знаки переноса (дефисы) будут во всех словах — а не где надо!
Sasha_Smirnov вне форума Ответить с цитированием
Старый 30.06.2010, 23:17   #6
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Sasha_Smirnov Посмотреть сообщение
Вместо "-" используй ChrW(30)
Это правильно, только сам

Код:
Mid(myRange, j, 1) = Mid(myRange, j, 1) + "-"
код не получается... вроде все правильно делаю...
chugo вне форума Ответить с цитированием
Старый 01.07.2010, 02:16   #7
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

а если & вместо плюса пользовать ?
bdfy вне форума Ответить с цитированием
Старый 01.07.2010, 22:21   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

chugo,bdfy, + и & в данном контексте эквивалентны.
Вы пытаетесь строке из одного символа
Mid(myRange, j, 1)
присвоить 2-х символьное значение
Mid(myRange, j, 1) + "-"

Было бы очень странно если бы это работало...
Aent вне форума Ответить с цитированием
Старый 01.07.2010, 23:42   #9
chugo
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Aent Посмотреть сообщение
Было бы очень странно если бы это работало...
В обшем уже вначале я делал ошыбку

Если кому-то интересно решил проблему так

Код:
For i = 1 To ActiveDocument.Words.Count
    For j = 1 To Len(ActiveDocument.Words(i))
        ActiveDocument.Words(i).Characters(j).Select
        S = Selection.Text
            
            For k1 = 0 To 4
                If S = Xmov(k1) Then
                    G = G + "a"
                    Exit For
                End If
            Next
            For k2 = 0 To 27
                If S = Tanxmov(k2) Then
                    G = G + "b"
                    Exit For
                End If
            Next

If G = "bb" Then
    G = "b"
End If


        If G = "baba" Then
            ActiveDocument.Words(i).Characters(j - 2).Select
            Selection.Text = Selection.Text + "-"
            G = ""
            j = j - 1
        End If
т.е. Я вобше не использую mid(?,?,?)

Спасибо всем кто читал
Тема закрыта
chugo вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
Переносы Syltan Microsoft Office Word 1 03.12.2009 21:06
vba Joslen_bomon Microsoft Office Excel 8 04.10.2009 11:20
VBA!! NitriNKa Помощь студентам 1 02.04.2009 23:07