powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите дописать макрос
22 сообщений из 22, страница 1 из 1
Помогите дописать макрос
    #36608260
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые знатоки.
Нашел на форуме макрос, который выполняет первую часть моей задачи. Т.е. выделяет фрагмент «от и до» ключевого слова. Но мне
необходимо нарезать текст по параграфам и вставить в файлы word под именами 01.doc (для Параграфов1), 02.doc (для Параграфов2) и т.д. Слово «Параграф…» вырезается с принадлежащим ему текстом.

Параграф1
Текст текст текст… текст. Текст
Параграф2
Текст текст текст…. Текст текст
Параграф3
Текст текст текст…. текст текст
……..
Параграф10
Текст текст текст текст…. текст


Этот макрос выделяет фрагменты

Sub FindWords( _
ByRef strWord1 As String, _
ByRef strWord2 As String)
Dim rng As Range
Static rngTemp As Range

Set rng = ActiveDocument.Content

With rng.Find
.ClearFormatting
.Text = strWord1
.Forward = True
.Wrap = wdFindContinue
.MatchWholeWord = True
.MatchCase = False
.Execute
If .Found = True Then
If rngTemp Is Nothing Then
Set rngTemp = rng
FindWords strWord2, strWord1
Else
rng.SetRange rngTemp.Start, rng. Start
rng.Select
Set rngTemp = Nothing
End If
End If
End With
End Sub
______________________________________
Sub Параграф1()
FindWords " Параграф1", " Параграф2"
End Sub
________________________________________
Sub Параграф2()
FindWords " Параграф2", " Параграф3"
End Sub

И т.д.
При этом я даже не смог придумать как выделить последний 10-й параграф
Sub Параграф10()
FindWords " Параграф10", "?????????????????"
End Sub
– не знаю каким символом указать на конец публикации.
Буду очень признателен за помощь.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608312
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ох, блин, опять...
=====================

Уважаемые знатоки.
Нашел на форуме макрос, который выполняет первую часть моей задачи. Т.е. выделяет фрагмент «от и до» ключевого слова. Но мне
необходимо нарезать текст по параграфам и вставить в файлы word под именами 01.doc (для Параграфов1), 02.doc (для Параграфов2) и т.д. Слово «Параграф…» вырезается с принадлежащим ему текстом.

Параграф1
Текст текст текст… текст. Текст
Параграф2
Текст текст текст…. Текст текст
Параграф3
Текст текст текст…. текст текст
……..
Параграф10
Текст текст текст текст…. текст


Этот макрос выделяет фрагменты

Код: plaintext
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.
Sub FindWords(ByRef strWord1 As String, ByRef strWord2 As String)
    Dim rng As Range
    Static rngTemp As Range
    
    Set rng = ActiveDocument.Content
        
    With rng.Find
        .ClearFormatting
        .Text = strWord1
        .Forward = True
        .Wrap = wdFindContinue
        .MatchWholeWord = True
        .MatchCase = False
        .Execute
        If .Found = True Then
            If rngTemp Is Nothing Then
                Set rngTemp = rng
                FindWords strWord2, strWord1
            Else
                rng.SetRange rngTemp.Start, rng. Start
                rng.Select
                Set rngTemp = Nothing
            End If
        End If
    End With
End Sub
______________________________________
Sub Параграф1()
FindWords " Параграф1", " Параграф2"
End Sub
________________________________________
Sub Параграф2()
FindWords " Параграф2", " Параграф3"
End Sub
И т.д.
При этом я даже не смог придумать как выделить последний 10-й параграф
Код: plaintext
1.
2.
Sub Параграф10()
FindWords " Параграф10", "?????????????????"
End Sub
– не знаю каким символом указать на конец публикации.
Буду очень признателен за помощь.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608315
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как выглядит документ?
Может быть тупо просто перебрать все параграфы и рассовать парами в разные файлы? Или там есть что-то ненужное?
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608316
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...просто есть устойчивое ощущение, что проще будет решить другим способом, а не тем, какой вы хотите использовать....
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608330
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Файлов с такими "параграфами" больше десятка в день, меняются два-три раза в неделю. На ручняке никак низзззя. Лет 10 назад делал подобный сценарий для PageMakera (у него свой язык скриптинга), но перекидывать из ворда в РМ, а потом обратно - то ж не в радость...

К приведенному выше скрипту надо прикрутить "вырезать" - "открыть *.doc" - "вклеить".
Файлы для обработки открываю пачкой - последовательно обрабатываю первым макросом "Параграф1". За тем следующий макрос "Параграф2"...

Но есть какая то закавыка - на двух форумах молчек....
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608332
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapitelНа ручняке никак низзззя

Я этого не предлагал!
Я говорю, что способ возможно выбран неоптимальный. В частности, .Select вам скорее всего не нужен.
Просто выложите пример файла, на котором, в конце-концов, попробовать можно.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608334
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу уточнить, что я правильно понял - есть кучка файлов 01.doc, 02.doc и т.п. И в них дописываются абзацы из очередного обрабатываемого документа.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608337
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Текст" я показал в самом начале, можно раширить:
Параграф1
Текст текст текст… текст. Текст
Параграф2
Текст текст текст…. Текст текст
Параграф3
Текст текст текст…. текст текст
Параграф3
Параграф3
Параграф10
Текст текст текст текст…. текст
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608339
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"Текст" я показал в самом начале, можно раширить:
Параграф1
Текст текст текст… текст. Текст
Параграф2
Текст текст текст…. Текст текст
Параграф3
Текст текст текст…. текст текст
Параграф4
Как ныне сбирается вещий Олег
Отмстить неразумным хозарам,
Параграф5
Их селы и нивы за буйный набег
Обрек он мечам и пожарам;
Параграф6
С дружиной своей, в цареградской броне,
Князь по полю едет на верном коне.
.......
Параграф10
Текст текст текст текст…. текст
Соответственно для "Параграфа1" - имеющийся 01.doc, для "Параграфа2" - 02.doc
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608343
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapitel"Текст" я показал в самом начале

Да, но на нем не видна разбивка по абзацам. То есть текст "ПараграфN" является отдельным абзацем?

Далее, означает ли фрагмент:
Параграф3
Текст текст текст…. текст текст
Параграф3
Параграф3
то, что в файл 03.doc должно быть дописано четыре указанных парагафа? или только два первых?

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

Еще вопрос с нумерацией файлов. Так я понимаю - до 9-го дописывается предшествующий ноль, далее не дописывается. А после 99 как именуются файлы? или есть ограничение - 10 - последний?
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608348
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если Вы запустите предложеный макрос вы увидите выделение. Именно это выделение необходимо вырезать и вставить в вордовский файл.
Вкладываю ZIP с файлами
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608350
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
!!! Слово "Параграф..." остается со "своим" текстом...
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608352
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы вам набросал свое видение решения, но вы не ответили на массу заданных вопросов и не приложили оригинальный файл (в архиве только результирующие). Надеюсь, до утра вы сможете перечитать ветку и все-таки ответить на все вопросы, если ответите, утром попытаюсь набросать решение.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608355
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, действительно, под одинаковым грифом "Параграф..." могут находится разные тексты и они должны попасть в соответствующий док. Потом эти "параграфы" будут дополнительно обрабатываться, но это не входит в задачу данного макроса.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608445
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный вы человек. Просите помочь, а на вопросы не отвечаете, потом еще удивляетесь, что вам не помогают.
Вот вам код, который делает примерно то, что вы хотите. Раз не даете уточнений, доводите сами то нужного вам состояния.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Option Explicit

Private Const KeyWord As String = "Параграф"

Sub tt()

Dim i As Long, p As Paragraph, Num As String
Dim DC As Document

Application.ScreenUpdating = False
For i =  1  To ThisDocument.Paragraphs.Count
  Set p = ThisDocument.Paragraphs(i)
  If Left$(p.Range, Len(KeyWord)) = KeyWord And IsNumeric(Replace(p.Range, KeyWord, "")) Then
    Num = Replace(Replace(p.Range, KeyWord, ""), vbCr, "")
    Set DC = New Document
    DC.Range = p.Range + p.Next.Range
    DC.SaveAs "c:\2\" + Num + ".doc"
    DC.Close
    Set DC = Nothing
    i = i +  1 
  End If
Next
Application.ScreenUpdating = True

End Sub
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608450
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный вы человек. Просите помочь, а на вопросы не отвечаете, потом еще удивляетесь, что вам не помогают.У меня создалось стойкое ощущение, что довольно многочисленная аудитория участников различных форумов, просто органически не переносит давать ответы на встречные вопросы. Наверное потому, что настроена только на получение ответов... (?)
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608451
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправлюсь: ... довольно многочисленная часть аудитории...
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608453
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlth, по моим наблюдениям и опыту работы (не только на форумах), есть большой пласт людей, которые не видят вопросы, если они даются сплошным списком. Как правило, ответ дается только на последний вопрос из списка и, даже когда просишь ответить на остальные, возникает искреннее непонимание того, чего я от них хочу. То есть такие люди неспособны мысленно разбить абзац на части и вынести из него несколько мыслей, какая-то внутренняя установка: 1 абзац (1 пост) = 1 мысль.
Иногда помогает способ - разбить вопросы на разные абзацы, пронумеровать их и заставить контрагента ответить по пунктам , но, что самое интересное, это не всегда помогает.

Мне кажется, это можно простить гуманитарию, отнестись с пониманием и подстроиться под него, но программисту это непростительно. Был у меня один программер в подчинении, вроде и знание и опыт, но - пишешь ему ТЗ, если в абзаце две мысли, он одну из них не замечает. Даже когда тыкаешь носом в ТЗ и говоришь - ТЗ сделано не полностью, все равно не замечает... так и расстались.

Впрочем, не будем гадить в топике философией, может все-таки будет продолжение разработки...
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608468
Фотография vlth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlth, по моим наблюдениям...
...
Впрочем, не будем гадить в топике философией, может все-таки будет продолжение разработки...Shocker.Pro, полностью согласен.
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608536
kapitel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Provlth, по моим наблюдениям и опыту работы (не только на форумах), есть большой пласт людей, которые не видят вопросы,
Согласен. Я и просил дописать рабочий макрос, без усложнений...
Спасибо большое всем. Благодаря вам разобрался и закончил макрос так:

Application.Run MacroName:="Параграф1"
Selection.Cut
Documents.Open FileName:="01.DOC"
Selection.PasteAndFormat (wdPasteDefault)

Application.Run MacroName:="Параграф2"
Selection.Cut
Documents.Open FileName:="02.DOC"
Selection.PasteAndFormat (wdPasteDefault)
и т.д.
Все
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608589
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kapitelБлагодаря вам разобрался и закончил макрос так:

Все же не благодаря, а вопреки.
Ибо ну по хорошему вместо
Код: plaintext
For i= 1  To  10 
не пишут
Код: plaintext
1.
2.
3.
i= 1 
i= 2 
i= 3 
...
...
Рейтинг: 0 / 0
Помогите дописать макрос
    #36608595
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и буфер приличные программы не портят...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Помогите дописать макрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]