[Word VBA] Замена с извращениями

Программирование на Visual Basic for Applications
amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

[Word VBA] Замена с извращениями

Сообщение amix » 23.08.2005 (Вт) 19:24

Плиз, хелп!

Не могу никак додуматься, как можно провести в документе вот такую хитрую замену:
В документе более двухсот сносок. Хочется заменить сразу все знаки сносок в тексте такими же числами, но просто в верхнем индексе, а сами сноски в концах страницы поудалять. Хочется как-то автоматизировать процесс.

Огромное спасибо заранее!!!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 3:30

В общем случае это сложно, потому что footnote.reference.text не возвращает номер сноски.
У тебя там сноски пронумерованы как?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 24.08.2005 (Ср) 8:38

GSerg писал(а):В общем случае это сложно, потому что footnote.reference.text не возвращает номер сноски.
У тебя там сноски пронумерованы как?


В этом вся и лажа. Треть сносок вручную переделали до меня... так что с 66 до 216.

Но в принципе, я извратился и с пом. макроса SaveIt тов. Орлова (нашел на сайте microsoft.ru/offext). Преобразовал все сноски в обычные (были концевыми), сноски поудалял, а сами числа таки преобразовались в верхний индекс, но это уже гиперссылки. теперь избавляюсь от них. :)

Но все же интересно, хотя б, как переделать текущую сноску в цикле в верхний индекс.

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 8:45

а давай вмести подумаем: что будет если поставить макрос на запись и выставить верхний индекс :twisted:
как думаешь? :)
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 24.08.2005 (Ср) 9:04

lord0n писал(а):а давай вмести подумаем: что будет если поставить макрос на запись и выставить верхний индекс :twisted:
как думаешь? :)


Попробовал. ставлю на запись,выделяю. лезу в абзац-шрифт. выставляю. стоп.
просматриваю. Ничего нет :( странно...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.08.2005 (Ср) 9:08

Пару страниц приаттачь :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 9:14

amix писал(а):
lord0n писал(а):а давай вмести подумаем: что будет если поставить макрос на запись и выставить верхний индекс :twisted:
как думаешь? :)


Попробовал. ставлю на запись,выделяю. лезу в абзац-шрифт. выставляю. стоп.
просматриваю. Ничего нет :( странно...


вот что записалось у меня
Код: Выделить всё

    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    With Selection.Font
        .Name = "Times New Roman"
        .Size = 12
        .Bold = False
        .Italic = False
        .Underline = wdUnderlineNone
        .UnderlineColor = wdColorAutomatic
        .StrikeThrough = False
        .DoubleStrikeThrough = False
        .Outline = False
        .Emboss = False
        .Shadow = False
        .Hidden = False
        .SmallCaps = False
        .AllCaps = False
        .Color = wdColorAutomatic
        .Engrave = False
        .Superscript = True
        .Subscript = False
        .Spacing = 0
        .Scaling = 100
        .Position = 0
        .Kerning = 0
        .Animation = wdAnimationNone
    End With
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 24.08.2005 (Ср) 9:31

Не, приаттачить не могу :) Это может даже докторская или еще выше диссертация моей начальницы на работе :)

Ага, с тем, что записалось, ща поэкспериментирую :) ТОлько все-же ничего похожего на верхний абзац не вижу....

Вот исходный кусок кода, который я ща мучаю (копирайты оставлю - (с) Орлов А.А., 1999 г.):

Код: Выделить всё

    ActiveDocument.Endnotes.Convert
    Selection.EndKey Unit:=wdStory
    Selection.TypeParagraph
rr = ActiveDocument.Hyperlinks.Count
nn = ActiveDocument.Footnotes.Count
For ii = 1 To nn
snn = "snoska" + Trim(Str$(ii))
naz = "nazad" + Trim(Str$(ii))
   ff = ActiveDocument.Footnotes(ii).Range
    Selection.EndKey Unit:=wdStory
Selection.TypeText Text:=Trim(Str$(ii)) + " "
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:=snn
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
Selection.EndKey Unit:=wdLine
Selection.TypeText Text:=ff + "   "
Selection.GoTo What:=wdGoToFootnote, Which:=wdGoToAbsolute, Count:=ii
    ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", SubAddress:=snn
    Selection.TypeBackspace
    With ActiveDocument.Bookmarks
        .Add Range:=Selection.Range, Name:=naz
        .DefaultSorting = wdSortByName
        .ShowHidden = False
    End With
    Selection.Font.Superscript = wdToggle
    Selection.TypeText Text:=Str$(ii)
  Selection.EndKey Unit:=wdStory
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:="", SubAddress:=naz
    Selection.TypeBackspace
    Selection.TypeText Text:=tekst + Chr$(13)
Next ii


Никак не могу его почистить от того, что мне не нужно... Автор, видимо, комментарии оставлять не любит :(

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.08.2005 (Ср) 9:43

.Superscript = True
этот кусок отвечает за верхний индекс
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 25.08.2005 (Чт) 11:51

Так, еще вопрос, если можно. Каким оператором добавляется текст?
Или чего поменять в коде, который я процитировал, чтоб вместо гиперссылок добавлялось просто значение переменнной ii (ессно с .Superscript = True)

Заранее еще раз огромное спасибо

ЗЫ Я работаю с VB, c VBA сталкиваюсь впервые, так что не удивляйтесь плиз тупым моим вопросам :)

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 25.08.2005 (Чт) 12:03

amix писал(а):Так, еще вопрос, если можно. Каким оператором добавляется текст?


Код: Выделить всё

Selection.TypeText Text:="dfkjghkdfghdkfjghd"
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 26.08.2005 (Пт) 15:02

О! Все получилось! :) Спасибо огромное.

Теперь вот какой вопрос. Значится так: ищем сноску, нашли. Если перед ней есть, например, точка, то удаляем точку. Как это дело реализовать?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.08.2005 (Пт) 15:18

dim r as range

...
set r=thisdocument.range(footnote.start-1, footnote.start)
if r.text = "." then r.delete
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 26.08.2005 (Пт) 16:15

footer не работает, т.к., видимо, из-за версии ворда. Он 97ой.
Предполагаю, что вместо него Footnote заработает. Но нет :(

Код: Выделить всё


dim r As Range

For ii = 1 To nn

...

Selection.GoTo What:=wdGoToFootnote, Which:=wdGoToAbsolute, Count:=ii

    Set r = ThisDocument.Range(Footnote.Start - 1, Footnote.Start)
    If r.Text = "." Then r.Delete

    Selection.Font.Superscript = True
    Selection.TypeText Text:=Str$(ii)
    Selection.Font.Superscript = False ' правильно ли я добавляю точку
    Selection.TypeText Text:="."        ' сняв шрифт верхнего индекса?
    Selection.EndKey Unit:=wdStory

...

Next ii


GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.08.2005 (Пт) 16:29

footnote - это псевдокод исходя из твоей фразы "ищем сноску, нашли." :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

amix
Начинающий
Начинающий
 
Сообщения: 8
Зарегистрирован: 27.02.2005 (Вс) 20:42
Откуда: Питер

Сообщение amix » 28.08.2005 (Вс) 22:34

Вопрос: есть несколько подрядстоящих символов, например abc. Как символ "a", например сделать .Font.Superscript = False, "b" сделать .Font.Superscript = True, "b" сделать .Font.Superscript = False?


Вернуться в VBA

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

Сейчас этот форум просматривают: Google-бот и гости: 40

    TopList  
cron