Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 36
Word

Как пересортировать страницы документа по ФИО в алфавитном порядке из конкретной строки на странице?

09.07.2018, 08:23. Показов 1576. Ответов 10

Студворк — интернет-сервис помощи студентам
В Word понимание макросов даётся не так легко как в Excel, хотя и там я на уровне школы. У меня документ с 800+ страницами отделенными разрывом страниц и в каждой странице 12-й строкой идет ФИО, а 10-й строкой № документа. Нужно было сортировать страницы по ФИО. Пробовал разделить страницы в отдельные файлы с ФИО в имени файла, но не смог потом их объединить, их слишком много. Что тут можно сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2018, 08:23
Ответы с готовыми решениями:

При изменении ФИО в первом листе добавить новую ячейку с ФИО во второй лист
Как сделать чтобы при изменении ФИО в первом листе добавлялась новая ячейка с ФИО во второй лист,...

Повторяющие слова (фио, номер паспорта) в документе
Здравствуйте! Есть договор, где повторяются одни и те же слова несколько раз. Как в ворде 2010...

Преобразование ФИО в Фамилию И.О. в WORD документе
Доброго дня) Пытаюсь сделать Replacer в WORD макросе,но не с простой заменой,а с преобразованием...

10
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
10.07.2018, 13:17
Цитата Сообщение от Shukroollo Посмотреть сообщение
Что тут можно сделать?
Не думаю, что без примера файла с фамилиями хоть кто-то даст конкретный совет.
Но если совет в качестве новой концепции, то попробуйте страницы не сохранять отдельно и потом собирать в общий файл, а вместо этого делайте сортировку текстовых блоков внутри исходного файла. Видите фамилию - сравниваете со следующей. Если она "больше" то переносите её вперед. Ну алгоритмов сортировки много придумали вообщем-то.
1
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 36
11.07.2018, 10:31  [ТС]
Вот пример, но он на узбекской латинице.
Вложения
Тип файла: docx Uygurobod 814-t.docx (18.5 Кб, 4 просмотров)
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
11.07.2018, 11:54
Цитата Сообщение от Shukroollo Посмотреть сообщение
У меня документ с 800+ страницами отделенными разрывом страниц и в каждой странице 12-й строкой идет ФИО, а 10-й строкой № документа. Нужно было сортировать страницы по ФИО.
может создать из основного второй документ --таблицу(номер,фио, страница)
его можно сортировать, выбирать.....
РЕСПУБЛИКА УЗБЕКИСТАН
ПРЕИМУЩЕСТВО ОТ ФИНАНСОВОГО МИНИСТРА
ПЕНСИОННЫЙ ФОНД
КАЙСИ ГОРОДСКОЙ ОТДЕЛ

_______ год _______ _______ год

заказы
окрестности: Уйгуробод
N 10013816

ИСМАТУЛЛАЕВ МАКСАМАДНОДИР

В соответствии с Указом Президента Республики Узбекистан от 02.07.2018 № 5469

С 15 июля 2018 года
Тип пенсии: Пенсионный возраст

Общий стаж работы: 21 год 8 месяцев 15 дней
фактическая средняя заработная плата: хххх. 80 т.
Ориентировочная сумма: хххх р. 80 т.
базовая сумма пенсии: ххххх с. 4 т.
Для плюс стажировка: 0 процентов: 0 p. 0 т.

315312 с. 4 т. БОЛЬШАЯ МИНУТ

Начальник отдела _____________ Эгамбердиев С. K.
Руководитель группы ______ Абдусаломов Абдулхаким Миркомилович
Инспектор _____________ Аскаров Баходир Кахрамонович

По возрастанию: 1.070
1
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
11.07.2018, 13:10
Цитата Сообщение от Shukroollo Посмотреть сообщение
Пробовал разделить страницы в отдельные файлы с ФИО в имени файла
Получилось? Имена полученных файлов соответствовали фамилиям?
Цитата Сообщение от Shukroollo Посмотреть сообщение
о не смог потом их объединить, их слишком много.
Как объединяли?
1
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,934
Записей в блоге: 4
11.07.2018, 13:17
Цитата Сообщение от Shukroollo Посмотреть сообщение
Пробовал разделить страницы в отдельные файлы с ФИО в имени файла, но не смог потом их объединить, их слишком много.
зачем разделять --понятно, чтобы иметь доступ к любому человеку

не могу понять, зачем потом снова объединять
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
11.07.2018, 13:20
Цитата Сообщение от shanemac51 Посмотреть сообщение
зачем разделять --понятно, чтобы иметь доступ к любому человеку
Кстати да.
Но если в общем документе нужно, то доступ там можно через закладки организовать.
0
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 36
12.07.2018, 06:56  [ТС]
Писать макросы для Word не умею. поэтому создавал записью и слегка правил:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
Sub p2()
'
 
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^m"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.HomeKey Unit:=wdStory, Extend:=wdExtend
    Selection.Cut
    Documents.Add DocumentType:=wdNewBlankDocument
    With Selection.PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait
        .TopMargin = CentimetersToPoints(1.27)
        .BottomMargin = CentimetersToPoints(2)
        .LeftMargin = CentimetersToPoints(1.59)
        .RightMargin = CentimetersToPoints(1.5)
        .Gutter = CentimetersToPoints(0)
        .HeaderDistance = CentimetersToPoints(1.25)
        .FooterDistance = CentimetersToPoints(1.25)
        .PageWidth = CentimetersToPoints(21)
        .PageHeight = CentimetersToPoints(29.7)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .BookFoldPrinting = False
        .BookFoldRevPrinting = False
        .BookFoldPrintingSheets = 1
        .GutterPos = wdGutterPosLeft
    End With
    Selection.PasteAndFormat (wdFormatOriginalFormatting)
    Selection.TypeBackspace
    Selection.WholeStory
    'Selection.ParagraphFormat.LineSpacing ' =  'LinesToPoints(32948)
    Selection.HomeKey Unit:=wdStory
     Selection.MoveDown Unit:=wdLine, Count:=11
    Selection.HomeKey Unit:=wdLine
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=4, Extend:=wdExtend
    Selection.Copy
    Name1 = Selection
    Selection.HomeKey Unit:=wdLine
    Selection.MoveUp Unit:=wdLine, Count:=2
    Selection.EndKey Unit:=wdLine, Extend:=wdExtend
    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Copy
    Name2 = Selection
    Name3 = ActiveDocument.Name
    ChangeFileOpenDirectory "G:\WORK\WORKIT\20180708"
    ActiveDocument.SaveAs2 FileName:=Name1 + "_" + Name2 + Name3 + ".doc", _
        FileFormat:=wdFormatDocument, LockComments:=False, Password:="", _
        AddToRecentFiles:=True, WritePassword:="", ReadOnlyRecommended:=False, _
        EmbedTrueTypeFonts:=False, SaveNativePictureFormat:=False, SaveFormsData _
        :=False, SaveAsAOCELetter:=False, CompatibilityMode:=0
    ActiveWindow.Close
    
End Sub
В кратце, искал первый разрыв страницы, выделял до начала, копировал, вставил в новый документ. В процессе копировал ФИО и № документа (12-я и 10-я строки страниц) в переменную и вставлял в название файла.

Добавлено через 7 минут
Как оказалось стандартные средства офиса не дают возможности объединения файла в больших количествах, там только по одному, Ворд у меня даже открывать не стал файлы где то после 40.

Вот сейчас немного доходит, что нужно было открывать последовательно по одной, скопировать содержимое в общий файл и закрывать. Попробую в этом направлении, может получится.
0
40 / 37 / 9
Регистрация: 15.03.2018
Сообщений: 88
12.07.2018, 07:15
Цитата Сообщение от Shukroollo Посмотреть сообщение
Как оказалось стандартные средства офиса не дают возможности объединения файла в больших количествах, там только по одному, Ворд у меня даже открывать не стал файлы где то после 40.
Как пытались объединить-то?
Вставка -> Текст из файла? вроде как раз для этой задачи инструмент
1
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
12.07.2018, 09:54
Лучший ответ Сообщение было отмечено Shukroollo как решение

Решение

Shukroollo, пробуйте - создается новый документ
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Sub SortPages()
Dim t As Document, r As Range, n&, i&, s$, p&(0 To 32767), d$(0 To 32767), cl As New Collection
  Set t = ActiveDocument
  t.Range(t.Range.End - 1).InsertBefore Chr(12)       'добавить разрыв страницы в конце
  Set r = t.Range(0, 0)
  With r.Find
    .ClearFormatting
    .Text = "^m"
    .Forward = True
    .Wrap = wdFindStop
  End With
  Do
    p(n) = r.End                                      'начало очередной страницы
    If r.Move(wdParagraph, 11) < 11 Then Exit Do      'к 12-му абзацу страницы
    d(n) = r.Paragraphs(1).Range.Text                 'фамилия очередной страницы
    For i = 1 To cl.Count                             'простейшая сортировка на коллекции
      If d(n) < d(cl(i)) Then cl.Add n, , i: GoTo 1
    Next
    cl.Add n
1   n = n + 1
  Loop Until Not r.Find.Execute
  With Documents.Add
    For i = 1 To cl.Count
      t.Range(p(cl(i)), p(cl(i) + 1)).Copy            'скопировать диапазон очередной стриницы
      .Range(.Range.End - 1).Paste                    'вставить в конец нового документа
    Next
    .Range(.Range.End - 2).Delete                     'удалить разрыв страницы в конце
  End With
  t.Range(t.Range.End - 2).Delete
End Sub
2
0 / 0 / 1
Регистрация: 11.04.2013
Сообщений: 36
14.07.2018, 08:11  [ТС]
Офигеть, здорово! Работает как надо! Мне бы научиться так несколькими строками враз разруливать такие задачи.
То ли голова устала сильно, то ли с годами становится всё сложнее - и выделять время чтобы что то новое изучать, и мозгам тяжелее осваивать.

Спасибо, всем кто отозвался!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.07.2018, 08:11
Помогаю со студенческими работами здесь

В строке поменять местами наибольшую и наименьшую цифры, самую наименьшую в алфавитном порядке букву – с наибольшей
помогите пожалуйста нужен код ВБА 1. Символьная строка состоит из цифр и букв латинского...

Вставить столбец\строку в массиве в алфавитном порядке
Буду признателен за совет или код. Задача1 Есть массив в 1й строке в алфавитном порядке, при...

Замена конкретного текста изображением в документе MSWORD
Добрый день. Прошу помочь с макросом VBA для использования в MS WORD. На входе папка со...

Вывести фамилии в алфавитном порядке
на фотках задание!!!!!!!!!!!!!! сделайте плиз ток норм!!

Определить слово,которое является первым в алфавитном порядке...
люди выручайте!помогите решить ( №1 Определить слово,которое является первым в алфавитном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru