Nep Цитата: Файлы постоянно новые.
Может, я чего-то не понял... Я имею в виду, что при генерации серии файлов (как я понимаю, при помощи VBA, потому как других способов вроде пока нет) в первом файле задать закладки, а в остальных сделать на них ссылки. Через VBA это делается, я посмотрел в MSDN. (Можно даже при обновлении содержимого закладки автоматически открывать все документы в той же папке и обновлять их, хотя это уже посложнее.)
Поэтому не вижу, в чём может мешать тот факт, что файлы постоянно новые?
Добавлено TCPIP Цитата: Необходимо выполнить форматирование листингов
Вот в первом приближении код макроса (по крайней мере, на тех фрагментах, на которых я тестировал, работает). С внедрением в Word, надеюсь, проблем не возникнет. Да, функцию IsDelimiter() нужно будет уточнять. И вообще, тут ещё есть, над чем работать...
Sub SelectionSplitter()
On Error GoTo Err_Incorrect_Number
Dim nStrLen As Long
Dim sCurText As String
Dim sRes As String
Dim sTmp As String
nStrLen = CLng(InputBox("Enter maximum string length"))
On Error GoTo Err_Unexpected
sCurText = Selection.Range.Text
sRes = ""
While (Len(sCurText) > 0)
sTmp = Left(sCurText, nStrLen)
' Найти разделитель внутри текущей подстроки
While (Len(sTmp) < Len(sCurText) And _
Len(sTmp) > 0 And _
Not IsDelimiter(Right(sTmp, 1)))
sTmp = Left(sTmp, Len(sTmp) - 1)
Wend
If (Len(sTmp) = 0) Then
' Найти разделитель за текущей подстрокой (текущая строка слишком длинна, придётся делать её длиннее, чем задано)
While (Len(sTmp) < Len(sCurText) And Not IsDelimiter(Right(sTmp, 1)))
sTmp = Left(sCurText, Len(sTmp) + 1)
Wend
End If
sRes = sRes + sTmp + vbCrLf
sCurText = Right(sCurText, Len(sCurText) - Len(sTmp))
Wend
Selection.Range.Text = sRes
Exit Sub
Err_Incorrect_Number:
MsgBox "Incorrect number"
Exit Sub
Err_Unexpected:
MsgBox "Unexpected error: " & Err.Description
Exit Sub
End Sub
Function IsDelimiter(ByVal v_Char As String) As Boolean
Dim sLeftChar As String
If (Len(v_Char) <= 0) Then
IsDelimiter = False
Exit Function
End If
sLeftChar = Left(v_Char, 1)
If AscW(sLeftChar) <= 32 Then
IsDelimiter = True
Exit Function
End If
If (sLeftChar = "," Or sLeftChar = "." Or sLeftChar = "-" Or sLeftChar = "+") Then
IsDelimiter = True
Exit Function
End If
IsDelimiter = False
Exit Function
End Function