продвигаюсь!
почитал хелп, поизучал примеры - вроде конструкции должны были быть синтаксически правильными.
удалил код, начал заново, вместо копипейста написал все руками - теперь вроде бы все работает!
но забыл уточнить: новый док должен содержать просто список:
абзац(0)1:абзац(0)2
абзац(1)1:абзац(2)2
..
абзац(5)1:абзац(5)2
и т.д.
простым + пока обойтись не получается. видимо, нужны какие-то преобразования типов?
с форматированием первых абзацев в исходном документе вроде бы что-то получается.
круто! спасибо огромное!!!
тьфу. спутал апострофы и стандартные кавычки.
но все равно, не могу избавиться в dDest от символов разрыва страницы
хоть потом вручную удаляй...
не догоняю: в последнем if изменил строчки следующим образом:
mytext = "++"
dDest.Paragraphs.Add.Range.Text = p.Range.Text + mytext
j = j + 1
почему-то два плюса появляются лишь на последней странице dDest - почему так?
еще получилось изменить шрифт в первом абзаце каждого раздела. но когда стал делать якоря - почему-то они вешаются на символ разрыва страницы :-(
похоже, у меня ночью мозги работать отказываются...
вот весь код:
[codebox]Sub nn()
Dim dSource As Document, dDest As Document
Dim p As Paragraph
Dim j As Integer, k As Integer
Set dSource = Application.ActiveDocument
Set dDest = Documents.Add(, , , True)
Set p = dSource.Paragraphs(1)
j = 1
k = 1
Do While Not p Is Nothing
If Asc(p.Range.Characters(1)) = 12 Then
' dDest.Paragraphs(dDest.Paragraphs.Count).Range.InsertBreak wdLineBreak
j = 1
End If
If j < 3 Then
If j = 1 Then
p.Range.Font.Bold = True
p.Range.Font.Size = 16
dSource.Bookmarks.Add Name:="ros" + CStr(k), Range:=p.Range
'MsgBox p.Range
k = k + 1
End If
mytext = "++"
dDest.Paragraphs.Add.Range.Text = p.Range.Text + mytext
j = j + 1
End If
Set p = p.Next
Loop
'dDest.SaveAs "MyDocccab.doc"
End Sub
[/codebox]
кажется, с якорем начал догонять. просто макрос для каждого раздела первый абзац берет вместе с символом разрыва страницы.
хм.
интересно, а можно использовать что-то типа trim? не уверен, насколько это будет правильно в конструкции с якорями... :-(
ура!
все сделал!
спасибо большое, Tanya!
Воспользовался такой громоздкой конструкцией
Set aRange = p.Range
aRange.SetRange Start:=aRange.Start + 1, End:=aRange.End
dSource.Bookmarks.Add Name:="ros" + CStr(k), Range:=aRange
теперь другая фигня
простой код:
[codebox]Sub Compile_Menu()
i = 1
n = Selection.Paragraphs.Count
m = InputBox("Cumon!", "Type in da title", "mymenu")
For i = 1 To n
s = Selection.Paragraphs(i)
ActiveDocument.Hyperlinks.Add anchor:=s, _
SubAddress:=m + CStr(i)
Next i
End Sub
[/codebox]
на полутора страницах вдруг выдает ошибку на 21 абзаце
Fields are nested too deeply
и потом
Run-time error '5941'
The requested member of the collection does not exist
на строчке s = Selection.Paragraphs(i)
в чем дело - не могу разобраться :-(
чертовщина какая-то.
на 20 итерации почему-то selection.paragraps.count устанавливается в единицу и происходит обращение к несуществующему абзацу.
в чем может быть дело?
удивительное дело!
с таким вот кодом:
[codebox]
Set dSource = Application.ActiveDocument
n = dSource.Paragraphs.Count
m = "mymenu"
MsgBox s
For i = 1 To n
Set s = dSource.Paragraphs(i).Range
dSource.Hyperlinks.Add anchor:=s, SubAddress:=m + CStr(i)
MsgBox CStr(i) + " : " + CStr(dSource.Paragraphs.Count)
Next i[/codebox]
все равно при n=24 четыре раза выскакивала ошибка про nested too deeply, но скрипт свое отработал (после четырех лишних нажатий на enter)
решительно ничего не понимаю. чертовщина какая-то...