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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2010, 00:52   #11
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Вот так несколько более универсально
Код:
Sub QuickBookmark()
    Dim sBmName As String
    Dim i As Long
    sBmName = Selection.Text
    'Заменяем не буквы и не цифры на подчёркивание
    For i = 1 To Len(sBmName)
        Select Case Asc(Mid$(sBmName, i, 1))
            Case 48 To 57        '0-9
            Case 65 To 90         'A-Z
            Case 97 To 122       'a-z
            Case 192 To 255     'А-я
            Case 168, 184         'Ёё
            Case Else
                     Mid$(sBmName, i, 1) = "_"
        End Select
    Next i
    sBmName = "Z" & sBmName  'На случай если первый символ не буква
    On Error Resume Next
    With ActiveDocument.Bookmarks
        Do While .Exists(sBmName)       'Проверяем нет ли уже закладки с таким именем
            sBmName = sBmName & "_"     'Если есть дописываем в хвост подчёркивание
        Loop
        .Add sBmName, Selection.Range
    End With
End Sub

Последний раз редактировалось Aent; 30.03.2010 в 01:02.
Aent вне форума Ответить с цитированием
Старый 31.03.2010, 11:55   #12
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Теперь я доволен.

Последний раз редактировалось Frommerrr; 31.03.2010 в 19:26.
Frommerrr вне форума Ответить с цитированием
Старый 31.03.2010, 19:18   #13
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Сначала написал, что теперь я доволен, но вот для того, чтобы это было так, хотелось бы на конечном этапе сократить все множество подчеркиваний которые заменили все не буквы и не числа -- до одного (между словами). Это относится к универсальному макросу Aent.

Чтобы закладка из М = 28.29 и М = 24.8; t = 2.5, р < 0.02 была не такой: Z_М___28_29_и_М___24_8__t___2_5__р_ __0_0
А такой: Z_М_28_29_и_М_4_8_t_2_5_р_0_0
Не представляю как это сделать, хоть и пытался в меру своих сил.
Frommerrr вне форума Ответить с цитированием
Старый 31.03.2010, 23:06   #14
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Код:
Sub QuickBookmark()
    Dim sBmName As String
    Dim i As Long, j As Long
    sBmName = "Z" & Selection.Text
    'Удаляем не буквы и не цифры, заменяя на одиночное подчёркивание
    j = 1
    For i = 1 To Len(sBmName)
        Select Case Asc(Mid$(sBmName, i, 1))
        Case 48 To 57, 65 To 90, 97 To 122, 192 To 255, 168, 184
            Mid$(sBmName, j, 1) = Mid$(sBmName, i, 1)
            j = j + 1
        Case Else
            If Mid$(sBmName, j - 1, 1) <> "_" Then
                Mid$(sBmName, j, 1) = "_"
                j = j + 1
            End If
        End Select
    Next i
    sBmName = Left$(sBmName, j - 1)
    With ActiveDocument.Bookmarks
        Do While .Exists(sBmName)       'Проверяем нет ли уже закладки с таким именем
            sBmName = sBmName & "_"     'Если есть дописываем в хвост подчёркивание
        Loop
        .Add sBmName, Selection.Range
    End With
End Sub
Aent вне форума Ответить с цитированием
Старый 31.03.2010, 23:21   #15
Frommerrr
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 10
По умолчанию

Это то, чего я добивался. Спасибо Aent и viter.alex за помощь!
Frommerrr вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Быстрое решение учебных задач prog-f1 Фриланс 9 26.02.2011 10:29
Быстрое форматирование диска Anders Безопасность, Шифрование 9 25.04.2010 19:04
Быстрое удаление дублирующихся слов :). Utkin Общие вопросы Delphi 21 01.02.2010 08:25
Быстрое преобразование Фурье (комментарии). brendog Общие вопросы C/C++ 2 21.07.2009 01:15