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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2009, 09:47   #1
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию Замена знаков сноски (цифр на звездочки)

Как автоматически заменить обычные сноски в виде цифр на сноски в виде звездочек (Word 2003)? Через "параметры сносок" сделать это не выходит.
caute вне форума Ответить с цитированием
Старый 27.11.2009, 10:27   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Да, в 2003 не получается. А в 2007 получается
Код:
ActiveDocument.Footnotes.NumberStyle=wdNoteNumberStyleSymbol
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 27.11.2009, 11:53   #3
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

В 2003 тоже получается, но там звездочки чередуются со всякими странными крестами и знаками параграфа. Хотел бы я взглянуть в глаза программисту из MS, придумавшему такую веселую нумерацию сносок...
Спасибо, что подсказали насчет Word 2007! На работе стоит, сделаю там.
caute вне форума Ответить с цитированием
Старый 27.11.2009, 12:04   #4
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

К сожалению, в 2007-м тоже самое. Я не знаю, кто так придумал
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 24.12.2009, 05:08   #5
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию Можно

По-моему ничего трудного нет.
Перебираем сноски и пересоздаем как символьные.
Какой номер - столько символов "*".
Конечно, никакой автоматической нумерации не будет.
И еще помучаешься при определении номера у сносок с автоматической нумерацией.
Кстати, кто знает, как получить текст номера сноски при автоматической нумерации?
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 24.12.2009, 09:52   #6
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Перебираем сноски и пересоздаем как символьные.
Какой номер - столько символов "*".
что значит "перебираем"? как это технически выглядит?

Цитата:
Сообщение от Вождь Посмотреть сообщение
Конечно, никакой автоматической нумерации не будет.
мне она не нужна, документы готовые к употреблению
caute вне форума Ответить с цитированием
Старый 24.12.2009, 10:18   #7
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Технически это выглядит как просмотр коллекции Footnotes
Код:
Dim oFtnt As Footnote
For Each oFtnt In ActiveDocument.Footnotes
'Здесь пишем нужные действия
Next
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 25.12.2009, 02:26   #8
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Не совсем так:

Dim S As Section
Dim F As Footnote
Dim i&

' перебор разделов
For Each S In ActiveDocument.Sections
' перебор сносок
For i = 1 To S.Range.Footnotes.Count
Set F = S.Range.Footnotes.Item(i)
' пересоздаем сноску
F.Reference.Footnotes.Add _
Range:=F.Reference, _
Reference:=String(i, "*")
Next i
Next S
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 26.12.2009, 09:20   #9
caute
Форумчанин
 
Регистрация: 27.10.2009
Сообщений: 277
По умолчанию

Да, это решает проблему только в отдельных, редких случаях.
А возможен ли макрос, который сначала конвертирует сноски из непрерывных в постраничные формата *,[кресты],§ (последний из форматов в окошке "формат номера" в опциях сносок), а потом перебором [крест] = **, [двойной крест] = ***, § = ****?
Решение элегантным не назовешь, но проблему для документов, в которых не более 4 сносок на одной странице (а это подавляющее большинство доков) решило бы...
caute вне форума Ответить с цитированием
Старый 26.12.2009, 18:53   #10
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию Учись задавать вопросы - будешь получать правильные ответы.

Цитата:
Сообщение от caute Посмотреть сообщение
А возможен ли макрос, который сначала конвертирует сноски из непрерывных в постраничные формата *,[кресты],§ (последний из форматов в окошке "формат номера" в опциях сносок), а потом перебором [крест] = **, [двойной крест] = ***, § = ****?
Решение элегантным не назовешь, но проблему для документов, в которых не более 4 сносок на одной странице (а это подавляющее большинство доков) решило бы...
Это извращение не нужно. Зачем одну автонумерацию менять на другую? И оно не решает задачу, если в документе сноски, как с автоматической нумерацией, так и символьные.

Предлагаю радикальное решение:
Код:
Public Const c_U00_Asterisk& = &H2A ' (42) звездочка

Public Function Footnotes_ReferenceByNumberOnPage( _
    Optional ByRef nopCharCode As Long = c_U00_Asterisk) As Long
' преобразование маркеров сносок по принципу:
' номер сноски на странице - количество символов nopCharCode
' возвращает число преобразованных сносок
' !!! изменяет Selection

    'On Error Resume Next ' тест
    Footnotes_ReferenceByNumberOnPage = 0
    ' контроль
    If Application.Documents.Count <= 0 Then Exit Function

Dim S$
    
    S = ChrW$(nopCharCode)
    If Len(S) <> 1 Then Exit Function

Dim R As Range
Dim k&

    ' режим разбивки на страницы
    ActiveWindow.View.Type = wdPrintView
    ' перебираем страницы
    Set R = ActiveDocument.Range(0, 0)
    For k = 2 To ActiveDocument.ActiveWindow.Panes(1).Pages.Count
        ' идем в начало страницы
        Selection.GoTo _
            What:=wdGoToPage, _
            Which:=wdGoToAbsolute, _
            Count:=k
        ' область страницы
        R.SetRange R.End, Selection.Range.Start
        ' конвертируем
        GoSub sub_Convert
    Next k
    ' последняя страница
    R.SetRange R.End, ActiveDocument.Range.End
    GoSub sub_Convert
    Exit Function
    
sub_Convert: ' конвертируем маркеры сносок области R
    
Dim F As Footnote
Dim i&
    
    For i = 1 To R.Footnotes.Count
        Set F = R.Footnotes.Item(i)
        ' пересоздаем сноску
        On Error Resume Next
        F.Reference.Footnotes.Add _
                Range:=F.Reference, _
                Reference:=String(i, ChrW$(nopCharCode))
        If Err.Number = 0 Then _
            Footnotes_ReferenceByNumberOnPage = Footnotes_ReferenceByNumberOnPage + 1
    Next i
    Return
    
End Function
К сожалению, при переборе страниц без Selection не обойтись
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сноски dima9 Microsoft Office Word 10 27.11.2009 09:57
Замена подстрочных знаков mephist Microsoft Office Word 5 14.09.2009 18:19
Замена чисел на звездочки SL1CK Общие вопросы Delphi 1 28.08.2009 14:06
замена знаков и букв memka PHP 8 19.04.2009 18:51