PDA

Показать полную графическую версию : Вопрос- ответ. Поставить по алфавиту.


cher
15-05-2012, 21:49
Есть такая задачка......
Вопросник - ответник. Надо вопросы отсортировать по алфавиту(так чтоб ответы "прикреплялись" к своим ответам)
Помню как то делал разок при помощи абзац-сортировка по алфавиту.
Но тут трудности. Документов много и они объемные(выделять замучаешься)- и как к ним прикрепить ответы не понятно....
+ Перед каждой строкой стоит Вопрос , Ответ(как их игнорировать тоже не знаю)
Варианты прикрепляю.....
как есть- http://s019.radikal.ru/i600/1205/97/c68ff42bea74t.jpg (http://radikal.ru/F/s019.radikal.ru/i600/1205/97/c68ff42bea74.png.html)

как примерно надо - http://s019.radikal.ru/i635/1205/3e/73e344d15437t.jpg (http://radikal.ru/F/s019.radikal.ru/i635/1205/3e/73e344d15437.jpg.html)

..Вопрос -Ответ убрал.... как бы далее?

Iska
16-05-2012, 01:33
cher, примерно так:
Option Explicit

Sub ReformatDocument()
Const strQuestionTag = "ВОПРОС - "
Const strAnswerTag = "ОТВЕТ - "

Dim objParagraph As Paragraph
Dim objDocument As Document
Dim objRange As Range


Set objDocument = Application.Documents.Add()
Set objRange = objDocument.Range

For Each objParagraph In ThisDocument.Content.Paragraphs
If Trim(objParagraph.Range.Text) = vbCr Then
' Nothing to do
ElseIf Left(objParagraph.Range.Text, Len(strQuestionTag)) = strQuestionTag Then
With objRange
.InsertAfter Mid(objParagraph.Range.Text, Len(strQuestionTag) + 1)
.Bold = True
.Collapse wdCollapseEnd
End With
ElseIf Left(objParagraph.Range.Text, Len(strAnswerTag)) = strAnswerTag Then
With objRange
.InsertAfter Mid(objParagraph.Range.Text, Len(strAnswerTag) + 1)
.Bold = False
.Collapse wdCollapseEnd
End With
End If
Next
End Sub

Вставьте данный код в модуль «ThisDocument» документа и выполните его. Получите новый документ потребного вида.

cher
16-05-2012, 07:15
Iska, Огромное спасибо!
Но я раньше с макросами не работал, даже не знаю как правильно... не подскажете? :sorry:
Делаю так :
1- Открываю нужный документ
2- Макросы- создать
3- Вставляю приведенный вами скрипт в окно
4 - Жму значок записи(Runsub/UserForm)
5- У меня открывается еще один пустой документ word
6- Навожу на ThisDocument - жму Run Macro далее run... открывается еще один документ(пустой).
7- В пустой документ копирую текст - Макросы -выполнить. Опять пустой документ.

... вроде как что то получилось, но не по алфавиту.
http://s019.radikal.ru/i639/1205/22/9c11de1d2580t.jpg (http://radikal.ru/F/s019.radikal.ru/i639/1205/22/9c11de1d2580.png.html)

Iska
16-05-2012, 20:55
Делаю так :
1- Открываю нужный документ
…»
Смотрите здесь: Начало работы с VBA в Word 2010 (http://msdn.microsoft.com/ru-ru/library/ff604039.aspx), начиная отсюда:

Работа в редакторе Visual Basic

Макросы для Word пишутся на языке программирования Visual Basic for Applications (VBA).

Макросы создаются в компоненте Word, который большинство пользователей никогда не видят, — в редакторе Visual Basic (VBE). Открыть редактор Visual Basic можно одним из указанных ниже способов.

* Нажмите сочетание клавиш ALT + F11


и т.д. Код Вам будет нужно поместить именно в сам документ (несмотря на то, что указанная статья сие не рекомендует), в модуль «ThisDocument».

P.S. После того, как код у Вас заработает на одном, выложенном Вами документе, поговорим более подробно про:
Документов много и они объемные »
и как с этим лучше поступить.

cher
16-05-2012, 21:01
Iska, Ок! Смотрите здесь: Начало работы с VBA в Word 2010, начиная отсюда: »
Это я смотрел , но "вскользь" т.к у меня не сработало Нажмите сочетание клавиш ALT + F11 »
Из за этого я и пошел в наглую в макросы.....
Добьюсь нужного результата/отсутствие оного- отпишусь.
Спасибо за поддержку! :)




© OSzone.net 2001-2012