Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Word VBA

Автор: sashko1980
Дата сообщения: 31.07.2014 01:01
msmih
мне тоже интересно, как у вас получится это реализовать. Хотелось бы, чтобы тот текст в документе, который назван Событие мог быть элементом управления содержимым (Ворд 2007 и старше ). Гуру VBA, пожалуйста ответьте!
Автор: mrdime
Дата сообщения: 31.07.2014 11:33
Всем привет,
Такой вопрос: в документе куча линий и рамок, созданных из тех же линий (объекты msoLine). Всю эту хрень надо удалить. Написал маленький макрос:

Цитата:
Sub DelShapes()
Dim MySh As Shape

For Each MySh In ActiveDocument.Shapes
If MySh.Type = msoLine Then
MySh.Delete
End If
Next MySh

End Sub

Запустил и сначала подумал, что не работает. Оказалось, чтобы удалить ВСЕ линии (а их было около 100) пришлось его запускать 4-5 раз. В чем проблема, почему он не удаляет все с первого прохода?
Автор: msmih
Дата сообщения: 31.07.2014 18:27

Цитата:
мне тоже интересно

пока мыслей никаких. я не могу понять как определять дату. по сути это обычный текст.
Навскидку некая генерация от 1 января по 31 декабря. И абзац равен этой генерации. Только как сделать ума не приложу
Автор: surgutfred
Дата сообщения: 15.08.2014 14:33
Нужно как то автоматизировать задачу:
есть штук 50 текстовых файлов в DOS кодировке с кирилицей, нужно их пересохранить в docx формат. Без VBA это не сделать я так понимаю. Когда то пару макросов в excel писал, так что начальное представление имею, но не глубоко. Есть пример поковырять?
Автор: vavavol
Дата сообщения: 27.08.2014 12:17
Ребята, может, подскажет кто-небудь? В VBA формирую вордовский документ. Алгоритм такой: есть два открытых программно документа - временный и основной. В временный загружаю шаблон из файла, вставляю закладки, потом Cut - Paste в основной. Ну, и так далее набиваю основной. Но вопрос не в этом. В конце после сохранении основного документа с помощью Save As при параметре wdFormatDocument97 в начале каждой страницы появляются пустая строка. А при wdFormatDocumentDefault - нормально. Что это за строка и как это побороть?
Автор: niccolo
Дата сообщения: 15.09.2014 17:08
Народ - подскажите - есть ли средство поменять в распознанном тексте все подписи к рисункам и названия таблиц на соответствующие ссылки в Ворд с предварительной настройкой способа нумерации, а также строки, пронумерованные но имеющие стиль простой текст, сделать заголовками соответствующего уровня, например 1. Введение - чтобы стало нумерованным заголовком 1-го уровня Введение, 1.2 Назначение - нумерованным заголовком 2-го уровня и т.п.?
Автор: dezak20x
Дата сообщения: 16.09.2014 08:08

Цитата:
есть штук 50 текстовых файлов в DOS кодировке с кирилицей, нужно их пересохранить в docx формат.

Столкнулся с той же проблемой. Если файлов не тысячи, то быстрее руками (открыл, посмотрел, сохранил). Иначе приходится постоянно допиливать скрипт, т.к. много нюансов возникает, если файлы не по одному шаблону созданы были.

Добавлено:
Например, где-то кодировка превращается в мусор, где-то форматирование слетает, где-то текст обрывается на букве "я" и т.д.
Автор: sam29
Дата сообщения: 04.11.2014 15:40
Добрый день!
Есть небольшая задача, с VBA пока хорошо не общался.
Как найти часть текста ( ХХХ: ) даже в таблицах и с последнего символа +1 взять 20 и присвоить переменной.
Автор: Fsp050
Дата сообщения: 21.11.2014 13:09
Подскажите, пожалуйста, как на VBA WORD воплотить такую задачу?
А именно рандомная(случайная) замена слов, т.е.
Например, слово "поэтому" встречается 100 раз можно ли его занимать в случайном порядке этими словами
-иными словами
-следовательно
-таким образом можно заключить, что
-поэтому мы можем сделать вывод о том, что
-исходя из этого мы делаем вывод о том, что
-то есть
-таким образом мы делаем вывод о том, что

но чтобы слово поэтому тоже было в тексте. Например, 100 слов это 100%
у нас 8 слов, соответственно, надо чтобы 12% слов было слово иными словами, 12% слово следовательно, 12% слово таким образом можно заключить, что... и так далее
12*7=84
а 16 процентов это слово поэтому.
но все эти слова случайно распределялись в тексте.
Можно ли такое сделать?
Автор: ALeXkRU
Дата сообщения: 21.11.2014 15:04
Fsp050

Цитата:
но чтобы слово поэтому тоже было в тексте.

включить и его в этот список слов для замены...
Тогда при случайном выборе из этого списка строк (массива) оно будет также встречаться, как и другие
Автор: Fsp050
Дата сообщения: 21.11.2014 16:56
ALeXkRU
а как это делать?) Я немного не программист)
Автор: 5peciali5t
Дата сообщения: 06.12.2014 22:50
доброго времени суток!

возникла задачка по удалению из документа разрывов раздела (которые натыканы по ctrl + enter и ищутся поиском по спецсимволам по коду ^b ) и абзацев (которые натыканы по enter и ищутся по спецсимволам по коду ^p).
после автоматической записи макроса получилось

Код: Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "^b"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
Selection.Delete Unit:=wdCharacter, Count:=1
Автор: Alex_Piggy
Дата сообщения: 06.12.2014 23:53
Доброе время, 5peciali5t
Добавьте replace:=wdReplaceAll
Заменит все совпадения в текущем документе.

Код:
Sub DeleteChars()
With ActiveDocument.Content.Find
.ClearFormatting
.Replacement.ClearFormatting
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
For Each Chars In Array("^p", "^b")
.Execute FindText:=Chars, Replace:=wdReplaceAll
Next
End With
End Sub
Автор: 5peciali5t
Дата сообщения: 07.12.2014 16:59
Alex_Piggy
огромное спасибо за отклик!
задачи на bat к vba отношения не имеют, я просто надеялся что если эту ветку никто не мониторит, то в топике по bat файлам с большой вероятностью найдутся разносторонне образованные в этом плане специалисты
ваш скрипт на примере простого документа без таблиц отрабатывает как надо, но в моем случае задача оказалась немного сложнее.
нужно объединить верхние и нижние границы таблиц, между которыми если включить отображение непечатаемых символов стоят разрывы строк и разрыв раздела, которые находятся по ^p и ^b но почему-то не обрабатываются скриптом
пример сформированного документа который нужно обработать http://pion.rghost.net/59474105
ума не приложу если честно почему в простом документе работает, а моем нет
Автор: Alex_Piggy
Дата сообщения: 07.12.2014 18:03
Доброе время, 5peciali5t
А если так? Удалить все между двумя таблицами? По следам How to join multiple tables together in a word document ?

Код:
Sub JoinTables()
With ActiveDocument
For i = .Tables.Count To 2 Step -1
Set rng = .Tables(i).Range
rng.Collapse wdCollapseStart
rng.Start = .Tables(i - 1).Range.End
rng.Delete
Next
End With
End Sub
Автор: 5peciali5t
Дата сообщения: 07.12.2014 19:35
Alex_Piggy
эффект просто потрясающий!
все именно так, как и требовалось сделать.
огромное спасибо за помощь!
Автор: Futurism
Дата сообщения: 26.12.2014 16:54
Подскажите, пожалуйста, как сделать, чтобы в документе слова менялись на синонимы из этого словаря
http://rghost.ru/private/59987233/c20a264348e11ad1e4f7e1f9d65384b9
но с учетом падежей и склонений.
у меня есть скрипт который позволяет учитывать падежи если есть предлог с

Function ConvertToAblativeCase(ByVal strToConv As String) As String
Dim sent() As String, base As String, ending As String
sent = Split(strToConv, , 2)
ending = Right(sent(0), 1)
Select Case ending
Case "а", "й", "я"
base = Left(sent(0), Len(sent(0)) - 1)
Select Case ending
Case "а"
sent(0) = base & "ой"
Case "й"
sent(0) = base & "ем"
Case "я"
sent(0) = base & "ей"
End Select
Case "ь"
sent(0) = sent(0) & "ю"
Case "е", "о"
sent(0) = sent(0) & "м"
Case Else
sent(0) = sent(0) & "ом"
End Select
ConvertToAblativeCase = Join(sent)
End Function
Автор: RomanoSadovnik
Дата сообщения: 08.03.2015 01:57
Futurism
Писать скрипт для всех падежей и склонений - занятие неблагодарное. Как идею могу предложить выдрать готовую dllку с Орфо (ссылка на варезник в шапке, мануал в pdf по функциям в ней есть на сайте разработчика), зарегить её (внимательнее с System32 or SysWOW64, если что), а словарь синонимов брать формат не txt (оценить ваш с rghost не могу - удалён), а переконвертированный html -> doc (на Флибусте в html пока есть).
Автор: Fsp050
Дата сообщения: 01.05.2015 17:39
Помогите, пожалуйста, школяру)
Я взял ряд рефов и диссеров и скопировал нужные мне из них части в один общий документ.
Т.о. у нас есть
5 доков с исходными нужными абзацами
и общий док, куда нужные части скопированы.
вот общий док
http://rusfolder.com/43578926
вот 5 доков
http://rusfolder.com/43578888
У каждого из пяти файлов есть оглавление.
С каждого файлы взято лишь несколько глав.
Например
док.1 глава 2 из оглавления
док.3 глава 1 - главу 1 из оглавления 3-го дока.
и так далее
В общий файл копируется название самой главы и её содержимое. Выглядит это так
Например вырезка из общего файла
Психолого-педагогические особенности подросткового возраста.. 13 док 3. Указание что глава такая-то взята из 3-его документа.
ДОК4
1.1.    Дефиниции понятия «жизнеспособность» субъекта
т.е. глава 1.1 взятая из дока 4.
и так далее
где начинается главы помечено красным. Т.е. начало и конец глав обозначается красным выделением название дока.

Например, кусок 3 документа помечен красным, начинается на 3-ей странице заканчивается на 7 странице, где пометка что док4 красным.

Что надо сделать. Надо чтобы из каждого документа был взят список литературы, но только той главы, которая был оттуда скопистена.
Например для куска из 3 дока видно это указание лит-ры
[3, 23, 40, 44, 66, 114].
Идем вниз, где этот список литературы дока 3. выискиваем эти номера.
копируем в общий документ в конец, где список литературы эти номера и авторов стоящих за ними
выглядеть должно так
ДОК3
[3, 23, 40, 44, 66, 114]
    Абульханова-Славская К.А. Деятельность и психология личности. - М., 1980. - 327 с.
    Асмолов    А.Г. Психология личности. - М.,1990,- С.167-173, 307-363.
    Братусь Б. С Аномалии личности. - М.: Мысль, 1988. - С.48-72.
    Бреслов Г. М. Эмоциональные процессы. - Рига, 1984.-196с.
там в конце списка литературы есть этот образец.
Аналогичным образом нужно также сделать и для остальных доков
док 4
но там оформление источника идет т.о.
функций, с наиболее активными и продуктивными фазами человеческой жизни (Джидарьян, 2008).
т.е. не цифрами а фамилией и годом. Если в каком-то из доков такой формат. то из списка лит-ры 4 дока в общий файл просто прописывается
фамилия автора и его труд
типа док 4
35.    Джидарьян И.А. Гуманистический смысл идей Б.Г. Ананьева о системном человекознании. // М
В 1 доке
там оформление идет через сноски. в таком случае из документа копируется в список литературы ,примечание этих сносок, например, на странице 3
    Зайцев, Д.В. Проблемы обучения детей с ограниченными возможностями адоровья / Д.В. Зайцев // Педагогика. — 2003. —№ 1. — С. 22.
Зайцев, ДБ. Интегрированное образование детей с ограниченными возможностями / Д.В. Зайцев // СОЦИС. — 2004. — № 7. — С. 129.
типа док 1
Зайцев, Д.В. Проблемы обучения детей с ограниченными возможностями адоровья / Д.В. Зайцев // Педагогика. — 2003. —№ 1. — С. 22.
Зайцев, ДБ. Интегрированное образование детей с ограниченными возможностями / Д.В. Зайцев // СОЦИС. — 2004. — № 7. — С. 129.

помогите, плиз такой макрос сделать.
Автор: ptr73
Дата сообщения: 02.05.2015 09:10
вручную всё перемолотить будет быстрее, чем подобный макрос написать и отладить
Автор: Fsp050
Дата сообщения: 02.05.2015 10:59
ptr73
это долго, а тем более такие работы писать часто приходится. Я могу и заплатить за макрос)) если вы способны его написать
Автор: ptr73
Дата сообщения: 02.05.2015 11:13
сорри, мне не интересна данная задача
но будем надеяться, что кто-то откликнется и вам поможет
Автор: polk90
Дата сообщения: 17.06.2015 20:41
подскажите, как в таблице убить первый и второй столбец? (или два раза первый)
(если поможет, таблица создается в резкльтате работы макроса, кроме этой таблицы на листе ничего нет)

upd. нашел Selection.Tables(1).Columns(1).Delete
Автор: polk90
Дата сообщения: 03.07.2015 21:52
Добрый день,
подскажите с макросом
есть таблица отсортированная по одному из столбцов, нужно разбить таблицу ориентируясь на группы получившиеся в отсортированном столбце.
чтоб было понятнее привел примеры того как есть и что должно получится,
файл там http://rghost.ru/private/7VNT6lnZQ/e7c732f1d338a36a48d883feff7fa445

решил.
Автор: Leagnus
Дата сообщения: 11.07.2015 12:07
Интересно, можно ли покрасить панель Навигации слева, где высвечиваются закладки / заголовки документа, страницы документа или просмотр результатов поиска, в тёмный цвет?
Автор: freed
Дата сообщения: 19.08.2015 21:25

Цитата:
А всё-таки, как разблокировать заблокированный проект VBA ("Project is unviewable")?

кому-нибудь удалось это сделать
Автор: valmont
Дата сообщения: 19.11.2015 16:12
на vba заполняю шаблон, значения заношу в созданные закладки, в word 2003 всё работает нормально, а в 2007 то работает, то выдаёт "запрашиваемый номер семейства не существует" + копирует и вставляет не отформатированный текст, если таблица то без ячеек, хотя иногда!!! срабатывает как надо.
дур дом какой-то.

может с 2007 какие-то нюансы появились в работе?
Автор: mrdime
Дата сообщения: 21.11.2015 03:05
Господа, что за хрень???
На одном компе: Word 2010 (стоял раньше) и 2013 (стоит теперь) включен режим "Отключить все макросы с уведомлением об этом" (Disable all macros with notification)
Все макросы записаны в шаблоне Normal.dotm
Ворд запускается и все макросы работают без каких-либо предупреждений.
На другом компе:
Word 2010, все то же самое, НО когда Ворд запускается, получаю сообщение, о наличии макросов + кнопка "Включить содержимое". Жму кнопку - ничего не происходит, кнопки назначенные для моих макросов как не работали, так и не работают, появляется сообщение, что макрос не найден. Помогает только переход в режим включения всех без исключения макросов.
В чем дело? Почему ОДНИ И ТЕ ЖЕ настройки приводят совершенно к разным результатам на разных компах?
Первый раз с таким цирком сталкиваюсь.
На обоих стоит Windows 7 x64 Ultimate SP1
Автор: alexvakula
Дата сообщения: 13.02.2016 15:19
Как реализовать выделения текста от слова, до слова?
Например:
Понедельник
бла,бла
бла,

Вторник
бла

Выделить текст мжеду понедельником и вторником
Автор: KDPoid
Дата сообщения: 13.02.2016 19:13
Выделить, значит задать Selection.Start и Selection.End
Поискать позицию слова "Понедельник" можно функцией InStr()

Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: Кластеризация изображений


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.