1

Тема: Сортировка страниц в word

Вообщем проблема такова. В документе ворд собрано 300-о с лишним станиц с платежными поручениями и как бы прям очень хотелось чтобы они были по суммам по порядочку. Все попытки рассортировать сей документ не принесли плодов. может кто сможет подсказать как быть в такой ситуации, может макрос какой подможет?

2

Re: Сортировка страниц в word

Можно макросом, но лучше увидеть пример страницы

Лучше день потерять — потом за пять минут долететь!

3

Re: Сортировка страниц в word

вот пример. каждая платежка занимает отдельную страницу все 300 страниц выкидывать не буду. надо чтоб сортировались страници по колонке "сумма" . А как это сделать ума не приложу... sad

Post's attachments

Пример плат. поруч.docx 53.14 Кб, 9 скачиваний с 2014-02-14 

You don't have the permssions to download the attachments of this post.

4

Re: Сортировка страниц в word

Ок. Попробуйте мой вариант. Подключите этот шаблон через Надстройки, откройте нужный документ, нажмите Alt+S (или Alt+F8 и выполнить макрос SortTables). После этого, по идее, должен создаться новый документ с таблицами, отсортированными по возрастанию суммы.
Макрос не ахти какой, на скорую руку. Буду рад, если помогут оптимизировать.

Option Explicit
Public Type Tbl
    Start As Long
    Sum As Single
End Type
Public Sub SortTables()
    Dim ar() As Tbl, oNewDoc As Document, oCurrDoc As Document
    Dim t As Tbl
    ReDim ar(0)
    Set oCurrDoc = ActiveDocument
    With oCurrDoc.Range.Find
        .Text = "<[0-9]@-[0-9]{2}>"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
        While .Execute
            t.Start = .Parent.Tables(1).Range.Start
            t.Sum = CSng(Replace(.Parent.Text, "-", ","))
            ar(UBound(ar)) = t
            ReDim Preserve ar(UBound(ar) + 1)
        Wend
    End With
    ReDim Preserve ar(UBound(ar) - 1)
    Dim i As Long, j As Long, temp As Tbl
    For i = 0 To UBound(ar) - 1
        For j = i + 1 To UBound(ar)
            If ar(i).Sum > ar(j).Sum Then
                temp = ar(i)
                ar(i) = ar(j)
                ar(j) = temp
            End If
    Next j, i
    Set oNewDoc = Documents.Add
    Dim oRng As Range
    For i = 0 To UBound(ar)
        oCurrDoc.Range(ar(i).Start, ar(i).Start).Tables(1).Range.Copy
        oNewDoc.Paragraphs.Last.Range.PasteAndFormat (wdFormatOriginalFormatting)
        If i < UBound(ar) Then oNewDoc.Paragraphs.Last.Range.InsertBreak wdPageBreak
    Next i
End Sub
Post's attachments

SorPayroll.dot 34 Кб, 2 скачиваний с 2014-02-14 

You don't have the permssions to download the attachments of this post.
Лучше день потерять — потом за пять минут долететь!

5

Re: Сортировка страниц в word

Сортировать можно на месте с помощью MoveText. В остальном, я похоже бы сделал.

Есть еще извращенная идея как это сделать руками: поместить платежки в таблицу, в первый столбец, ячейка - платежка, сделать закладки на суммы, вывести перекрестные ссылки с сумм во второй столбец, и просто отсортировать таблицу по второму столбцу.

Макросы под заказ и готовый пакет - mtdmacro.ru

6

Re: Сортировка страниц в word

отписываюсь по макрасу. Первые листов 7-8 сортирует корректно, но дальше получается вообще не понятно. Происходит следующее: следующие листы сортирует в хаотичном порядке и почему то если в исходном документе было 260 листов, то в созданом их уже 366, я просто в макросах вообще 0... help please

7

Re: Сортировка страниц в word

Странно. Ладно, добавим DoEvents, может на переключении между документами спотыкается.

Post's attachments

SorPayroll.dot 35 Кб, 3 скачиваний с 2014-02-14 

You don't have the permssions to download the attachments of this post.
Лучше день потерять — потом за пять минут долететь!

8

Re: Сортировка страниц в word

печаль... все равно страниц 10-15 все ровно, а потом все в разнобой...
а можете отхоровожить макрос до идеала скажем зелененьких так за 5? я бы оригинал документа скинул бы на маил

9

Re: Сортировка страниц в word

или назавите пожалуйста свой ценник за работу. любая работа должна оплачиваться

10

Re: Сортировка страниц в word

Решение найдено. Оказывается при поиске ошибочно находились цифры, не являющиеся суммой. Проблема решилась проверкой, что в ячейке ничего не содержится кроме найденного текста:

Public Type Tbl
    Start As Long
    Sum As Single
End Type

Public Sub SortTables()
    Dim ar() As Tbl, oNewDoc As Document, oCurrDoc As Document
    Dim t As Tbl
    ReDim ar(0)
    Set oCurrDoc = ActiveDocument
    With oCurrDoc.Range.Find
        .Text = "<[0-9]@-[0-9]{2}>"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindStop
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
        While .Execute
            .Parent.Select
            If Len(.Parent.Cells(1).Range.Text) = Len(.Parent.Text) + 2 Then
                t.Start = .Parent.Start
                t.Sum = CSng(Replace(.Parent.Text, "-", ","))
                ar(UBound(ar)) = t
                ReDim Preserve ar(UBound(ar) + 1)
            End If
        Wend
    End With
    ReDim Preserve ar(UBound(ar) - 1)
    
    Dim i As Long, j As Long, temp As Tbl
    For i = 0 To UBound(ar) - 1
        For j = i + 1 To UBound(ar)
            If ar(i).Sum > ar(j).Sum Then
                temp = ar(i)
                ar(i) = ar(j)
                ar(j) = temp
            End If
    Next j, i
    
    Set oNewDoc = Documents.Add
    For i = 0 To UBound(ar)
        oCurrDoc.Range(ar(i).Start, ar(i).Start).Tables(1).Range.Copy
        oNewDoc.Paragraphs.Last.Range.PasteAndFormat (wdFormatOriginalFormatting)
        If i < UBound(ar) Then oNewDoc.Paragraphs.Last.Range.InsertBreak wdPageBreak
        DoEvents
        StatusBar = "Обработано " & i & " таблиц из " & UBound(ar)
    Next i
End Sub
Лучше день потерять — потом за пять минут долететь!

11

Re: Сортировка страниц в word

viter.alex пишет:

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

Вообще макрос по моему мнению не правильно составлен. Надо делать перебор таблиц и создавать либо Array, либо Collection на основе ячееек каждой таблицы 89 (Номер платежки), 91 (Дата платежа), 135 (Сумма платежа).
Тогда можно будет сортировать эти таблицы по указанным параметрам. На основе этих данных уже можно будет составить процедуры:
1. Переход на указанную платежку.
2. Печать указанных платежек.
3. Создание сортировачного документа по выбранному параметру.

12

Re: Сортировка страниц в word

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

Лучше день потерять — потом за пять минут долететь!

13

Re: Сортировка страниц в word

viter.alex пишет:

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

Так таже по сумме ячека будет 135

14

Re: Сортировка страниц в word

Подскажите нашли ли вы решение проблемы, тема еще актуальна

15

Re: Сортировка страниц в word

Решение найдено и опубликовано в этом сообщении

Лучше день потерять — потом за пять минут долететь!