Войти

Показать полную графическую версию : [решено] Поиск строки с № и вставка последующего номера в конце документа (Word)


sergey-pskov
10-03-2011, 15:50
Приветствую! Столкнулся с такой проблемой: существует документ Word, куда заносятся определенные данные...
Каждые новые данные начинаются строкой № затем идет цифровой значение (оно может быть до 9999)
затем идет несколько строк (не регламентировано) с описанием (не содержащие "№")
после чего через пустую строку начинается новый №
Может это можно как-то автоматизировать
а то не сообразить как это сделать
а в программировании я не разбираюсь...
Заранее благодарен

Iska
10-03-2011, 23:02
sergey-pskov, Вам нужен макрос, который будет отслеживать последний номер и вставлять «его+1» по горячей клавише/кнопке на панели инструментов?

Если документ предназначен только для просмотра/печати (не для последующей машинной обработки) — достаточно соответствующего нумерованного стиля, в формате нумерации которого перед номером будет задан знак «№».

sergey-pskov
11-03-2011, 07:50
Вам нужен макрос, который будет отслеживать последний номер и вставлять «его+1» по горячей клавише/кнопке на панели инструментов?
Да! Мне нужен именно макрос... В моем случае "нумерованный список" не подходит...

Iska
11-03-2011, 14:30
sergey-pskov, цитирование осуществляется тэгом «quote» (http://forum.oszone.net/misc.php?do=bbcode#quote).

Мне нужен именно макрос... В моем случае "нумерованный список" не подходит... »
Ясно. Тогда пробуйте так:
Option Explicit

Sub AddNextNumber()
Const boolReNumberNext As Boolean = True

Dim arrLines() As String
Dim i As Long

Dim lngNextNumber As Long
Dim retValue As String

Dim objParagraph As Paragraph
Dim objRange As Range


Selection.Collapse Direction:=wdCollapseStart

arrLines = Split(ActiveDocument.Range(ActiveDocument.Range.Start, Selection.Range.Start).Text, vbCr)

lngNextNumber = 0

For i = UBound(arrLines) To LBound(arrLines) Step -1
If Left(arrLines(i), 1) = "№" Then
lngNextNumber = CLng(Mid(arrLines(i), 2))

Exit For
End If
Next

retValue = InputBox("Введите очередной номер:", "Очередной номер", lngNextNumber + 1)

If retValue <> "" Then
With Selection
.InsertParagraph
.InsertAfter "№" & retValue

.Collapse Direction:=wdCollapseEnd
.InsertParagraph

.Collapse Direction:=wdCollapseEnd
End With

If boolReNumberNext Then ' Перенумеровать все нижеследующие номера
lngNextNumber = CLng(retValue) + 1

For Each objParagraph In ActiveDocument.Range(Selection.Range.Start, ActiveDocument.Range.End).Paragraphs
If objParagraph.Range.Characters.Item(1) = "№" Then
Set objRange = objParagraph.Range

objRange.End = objRange.End - 1
objRange.Text = "№" & CStr(lngNextNumber)

lngNextNumber = lngNextNumber + 1
End If
Next
End If
End If
End Sub

Прикреплён образец документа с данным макросом, внедрённой панелью инструментов и горячей клавишей.

sergey-pskov
11-03-2011, 17:35
Благодарю! Большое спасибо!




© OSzone.net 2001-2012