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

» Word VBA

Автор: IvANANvI
Дата сообщения: 12.06.2011 10:39
suomifinland
Для написания макросов Ворда, не нужно быть программистом, сделано специально для блондинок, две кнопки Плэй (начать запись) и Стоп (Закончить запись), далее делаешь во время записи все, что заблагорассудиться (последовательность повторяющихся действий). Я помогу если, что. В вашем случае, последовательность примерно такая - Ctrl+H (Найти заменить), в поле Найти пишем, что хотим найти (Статья отнесена к разделу), в поле Заменить на - ничего. И однократно нажать кнопку Заменить, если в документе эта фраза не нужна везде, то Заменить все. Все. Клавиша Стоп.
Автор: suomifinland
Дата сообщения: 12.06.2011 11:25
Я это знаю , но дело в том что мне нужно удалить фразу не в одиночном файле , а сделать это одновременно, пакетно в 50 файлах, фраза одна и та же... Вот как автоматом это сделать..? А так конечно, в двух трех файлах это сделать реально, но подумайте открыть 50 файлов.., а если их 2500... Вот о че я речь веду...
Автор: Alexey87
Дата сообщения: 12.06.2011 20:07
Помогите пожалуйста решить следующую задачку:
есть строка, в ней может находиться информация следующего типа:
к.т.н., доцент Кордик В.В.
или
ст. преподаватель, В.В. Кордик
(причем с различным числом знаков препинаний (запятые, точки и др.), пробелов и различным положением инициалов).
Как автоматизированным способом (например, используя макрос) из такой строки выдернуть инициалы и фамилию и вставить в определенное поле в формате "Фамилия И.О."?
Автор: IvANANvI
Дата сообщения: 13.06.2011 21:18
suomifinland
Скрипт VBS, как раз для последовательного открытия всех файлов!
Автор: suomifinland
Дата сообщения: 13.06.2011 21:32
Ребята с Вашей помощью написала свой первый макрос.., да гениальное все просто...
А вот теперь новая задача, "нутром чую" что так можно сделать...


Проблема: ... есть работающий макрос, открываю текстовый файл и... запускаю его с помощью горячих клавиш, он все исправляет.., а можно ли сделать так, чтобы при открытии файла, макрос сам, автоматом запускался, и вносил изменения, самостоятельно, в вордовский файл..?
Автор: IvANANvI
Дата сообщения: 14.06.2011 15:19
suomifinland
Напишите имя вашего макроса, я подправлю под Вас скрипт.
Автор: biznesoft
Дата сообщения: 19.06.2011 12:14
IvANANvI
Скрипт начинает обрабатывать файлы, открыв первый файл останавливается с ошибкой на строка 36
Word.Application.Run("SelAbz")
Автор: asbo
Дата сообщения: 19.06.2011 12:58
IvANANvI
Я понимаю, что скрипты это наше все. Но, не до такой же степени :)
Джентльменам видимо льстит помогать дамам и они стараются, чтобы дамы чаще обращались за помощью :)

suomifinland
Не забивайте себе голову скриптами. Создайте просто пустой файл в Ворде, поместите в него следующий код и дополните его своим обработчиком. Будут обработаны все файлы в папке "C:\DOC\Examples\", имеющие расширение ".doc" и начинающиеся с "Test_":

Код:
Sub sb_Test()
'Dim fso As FileSystemObject, fFiles As Files, fFile As File
Dim fso As Variant, fFiles As Variant, fFile As Variant
Dim tPfx As Byte, tSfx As Byte
Dim sPath$, sFile$, sPfx$, sSfx$

sPfx = "Test_": tPfx = Len(sPfx)
sSfx = ".doc": tSfx = Len(sSfx)

sPath = "C:\DOC\Examples\"

Set fso = CreateObject("Scripting.FileSystemObject")
Set fFiles = fso.GetFolder(sPath).Files

For Each fFile In fFiles
sFile = fFile.Name
Debug.Print sFile
If Right(sFile, tSfx) = sSfx Then
Debug.Print "*** " & sFile
If Left(sFile, tPfx) = sPfx Then
Debug.Print "*** *** " & sFile & " Proceed" & vbLf
' Taalla laita koodi (Put your code here) (Здесь поместите свой код)
End If
End If
Next
End Sub
Автор: IvANANvI
Дата сообщения: 19.06.2011 22:31
biznesoft
Похоже вы не создали, макроса с именем SelAbz, я писал, что VBA макросы приложенные, должны быть, прописаны в Word.
asbo
Спасибо за код на VBA, просто послал сюда suomifinland, а её оперативно никто не ответил, сам решил немного помочь, немного подрулив не свой код на VBS. Других вариантов не было.
Автор: asbo
Дата сообщения: 19.06.2011 22:39
IvANANvI
Да не за что :) Я чуть подправил его - убрал декларации переменных от другого кода - случайно залетели.
Автор: oshizelly
Дата сообщения: 20.06.2011 09:19
А мне никто ничего так и не подскажет http://forum.ru-board.com/topic.cgi?forum=33&topic=5312&start=460#4
Элементарный же вопрос (для знатоков VBA имею в вижу).
Автор: Gena1971
Дата сообщения: 20.06.2011 12:07
oshizelly
Можно вот так оформить. При этом даже если чего то было выделено, то выделение вернется.

Код: pos_start = Selection.Start
pos_end = Selection.End
Selection.WholeStory
'--------------
'-------------- Действия с полностью выделенным документом
'--------------
Selection.Start = pos_start
Selection.End = pos_end
Автор: biznesoft
Дата сообщения: 20.06.2011 16:35
IvANANvI
Большое ВАМ САСИБО все работает.
Автор: IvANANvI
Дата сообщения: 20.06.2011 17:07

Цитата:
Код:
Sub sb_Test
....
()

asbo
Не получается дополнить ваш код на открытие файла по пути определенной переменной fFile

Вылетает с ошибкой такая строка на открытие:
Documents.Open FileName:=fFile

Не находит файла если так:
Documents.Open FileName:=sFile

Автор: asbo
Дата сообщения: 20.06.2011 18:01
IvANANvI
fFile - это объектная переменная с типом Variant специально для fso созданная. В указанном контексте 'Documents.Open FileName:=fFile'к ней нет смысла обращаться, и неправильно это.

sFile - это только имя файла. Без пути. Для чего написаго-то 'Debug.Print sFile'? Совсем не обязательно, что Ворд переместился в его папку (проверяется '? CurDir'). Правильно будет сформировать полный путь 'sPath & sFile' и использовать его:
Documents.Open FileName:=sPath & sFile
Автор: IvANANvI
Дата сообщения: 20.06.2011 20:32
asbo
Спасибо. Я думал в этом направлении, но синтаксиса не знаю.
Автор: oshizelly
Дата сообщения: 21.06.2011 02:00
Gena1971 12:07 20-06-2011
Цитата:
Можно вот так оформить. При этом даже если чего то было выделено, то выделение вернется.

На всякий случай переспрошу. Полностью код будет в моём примере выглядеть так, да?

Код:
pos_start = Selection.Start
pos_end = Selection.End
Selection.WholeStory
Selection.WholeStory
Selection.LanguageID = wdEnglish
Selection.Start = pos_start
Selection.End = pos_end
Автор: smirnvlad
Дата сообщения: 21.06.2011 07:25
oshizelly
Selection.WholeStory достаточно одного раза

А может и не нужно использовать Selection, а задать язык так:
ActiveDocument.Range.LanguageID = wdEnglishUS
тогда и выделение не изменится
Автор: oshizelly
Дата сообщения: 21.06.2011 10:39
smirnvlad

Цитата:
А может и не нужно использовать Selection, а задать язык так:
ActiveDocument.Range.LanguageID = wdEnglishUS
тогда и выделение не изменится


Тоже красивое решение! А что надо написать вместо "ActiveDocument.", чтобы сделать то же самое в отношении текущего абзаца?
Автор: smirnvlad
Дата сообщения: 21.06.2011 13:06
oshizelly
Первый из выделенных абзацев
Selection.Paragraphs.First.Range.LanguageID = wdEnglishUS

Последний выделенный абзац (может быть последним среди выделенных, если начинать выделение от начала к концу документа или первым если выделять с конца)
If Selection.StartIsActive Then
Selection.Paragraphs.First.Range.LanguageID = wdEnglishUS
Else
Selection.Paragraphs.Last.Range.LanguageID = wdEnglishUS
End If

Автор: oshizelly
Дата сообщения: 21.06.2011 23:33
smirnvlad

Цитата:
Первый из выделенных абзацев
Selection.Paragraphs.First.Range.LanguageID = wdEnglishUS

Спасибо, добавил себе в список макросов.
Но вообще-то я спрашивал про текущий абзац, а не про выделенный. Что-то там, навероное, должно быть вроде CurrentParagraph, нет?
Автор: Gena1971
Дата сообщения: 22.06.2011 00:19
oshizelly
Текущий абзац (где курсор) и есть первый. Он же и последний если ничего не выделено.
А вообще для отладки советую добавлять переменные (Selection в данном случае) в наблюдаемые (или как то так) - пункт "Add Watch..." и выполнять макрос пошагово - кнопка F8. При исполнении в окне Watches эта переменная будет отображаться и можно посмотреть и выбрать нужные данные для использования. Очень облегчает поиск нужного. Или отследить изменения и вычислить ошибку.
Автор: Zjaka
Дата сообщения: 05.07.2011 09:34
Добрый день.

Долго выбирала тему, в которой разместить сообщение. Флудить и создавать новую тему не стала. Если "ошиблась адресом" - прошу покорно извинить и направить в нужное русло.

ОПИСАНИЕ ЗАДАЧИ.
- Есть диаграмма (организационная или блок-схема... - со словесным содержимым элементов), построенная по тексту вручную. Т.е. части текста разнесены по тем или иным элементам диаграммы;
- Текст подвергается редактированию - удалению/добавлению некоторых фрагментов, или даже добавлению.

ЗАДАЧА. Диаграмма должна автоматически "изменяться за текстом". Если не полностью, то хотя бы должны отмечаться элементы диаграммы к удалению/добавлению.
Абстрагируемся, и предположим, что начальная постановка задачи не накладывает ограничение на используемое ПО, среды, методы...

Работа, затрагивающая выявление изменений в тексте, в данном случае, по моему мнению, сводится к применению аппарата строкового анализа. А вот к чему сводится добрая половина работы, касающаяся диаграмм?

ВОПРОС. Какими средствами можно с меньшими усилиями реализовать данную задачу (а еще у'же - организовать "связь между диаграммой и текстом, по которому она построена"? Стоит ли использовать офисное программирование? Например, выполнять диаграмму в MS Visio (MS Word-таки убогий в этом плане) или OO.o и дописывать функционал в VBA/StarBasic?
Или, может, имеет смысл решат задачу отдельно в "полноценной" среде программирования? - Но как тогда распознавать отдельные части диаграммы во входном файле для дальнейшей манипуляции с ними? Или, может, организовать подгрузку того же Visio/OO.o средствами среды... Есть или нет такая возможность?

Вобщем, нужны рекомендации. Буду крайне признательна. Я в начале "пути" и не знаю, с какой стороны взяться за решение.
Автор: Zjaka
Дата сообщения: 05.07.2011 17:45
Хочется знать, каким инструментом пользоваться надежнее, проще и быстрее - VBA или чем-то другим? Время ограничено, а потратить его и узнать, что колесо давно изобрели, будет обидно.

Темы для visio в "прикладном ПО" не нашла. Пожалуйста ответьте сюда или укажите, куда перенести тему, если это крайне необходимо.
Всем спасибо.
Автор: Zjaka
Дата сообщения: 27.07.2011 06:18
Вопрос все еще актуален. Заранее признательна за ответы.
Автор: RoMT
Дата сообщения: 27.07.2011 07:33
Zjaka
О Visio общаются в Microsoft Visio и лучше там спросить.

Можно позадавать вопросы на форуме Ссылка и посмотреть, что и как можно сделать в визио, на сайте Ссылка

Если честно, не понял поставленную задачу. А именно, что подразумевается под автоматическим изменением диаграммы.
В принципе в Visio и без VBA с диаграмамми можно много что наделать
Автор: SergBSI
Дата сообщения: 07.08.2011 21:20
Подскажите может существкет где готовое решение для Word:
Задача - есть несколько файлов (к примеру главы книги каждая глава - отдельный файл) необходимо организовать "сплошные" ссылки - перекрестные и концевые те чтобы например концевые ссылки были в отдельном файле и естественно во всех файлах также "шла" обновляемая нумерация
Подобное существует в др. редакторах например ТеХ
в самом Wordе "стандартных" возможностей подобного нет принципе
Автор: Zjaka
Дата сообщения: 15.08.2011 12:44
RoMT, спасибо за ссылки. Но вот только я не привязываю вопрос к аппарату Visio. Хочу хотя бы концептуально понять, на чем и в каком ключе можно и лучше и проще всего сделать.
Пробовала еще обсуждать на других форумах, но пока ничего путнего не добилась.

По поводу ЗАДАЧИ.
Упрощенный пример того, что нужно реализовать:

1. Есть текст: "Мама мыла раму".
Пользователь должен построить по нему диаграмму. Первый раз он это делает самостоятельно, вручную.

1.1. Пользователь использует определенную нотацию для создания диаграммы.
Нотация известна. Все элементы этой нотации названы (например, прямоугольный блок, овальный блок, стрелка и т.п.). В соответствие элементам нотации поставлен, например, цвет (красный - прямоугольный блок, синий - стрелка... и т.п.). Можно не использовать цвета, а создать таблицу и наполнять ее: в зависимости от того, куда в таблице пользователь отнесет фрагмент текста, ему присвоятся соответствующие свойства.

1.2. Пользователь просматривает текст и отмечает (как ему надо, в соответствие с определенной нотацией) только те элементы, которые будут принимать участие в диаграммах.
Пример: "маму" отмечает красным, "мыла" - синим, "раму" - красным.

1.3. Происходит автоматическая генерация диаграммы. Блоки в нужном количестве и качестве добавляются на лист (2 прямоугольных и 1 стрелка в нашем примере). Блоки наполнены содержимым - текстом.

1.4. Пользователь вручную соединяет блоки между собой. Как это необходимо.

2. Происходит изменение текста.
Новый текст: "Мама и Вася моют раму".

2.1. Старая строка текста сравнивается с новой.
Выясняется, что добавилось: "и Вася", "моют" вместо "мыла".

2.2. Пользователю демонстрируются изменения в тексте (извлекаются, а лучше даже подсвечиваются внутри остального текста).

2.3. Пользователю предлагается принять решение - что делать с изменениями в тексте? - пометить их как новые части диаграмм или проигнорировать.

2.4 Вместо "мама" пользователь отмечает красным "мама и вася".... Вместо "мыла" - "моют".

2.5. Генерируется новая диаграмма.

2.6. Пользователь вручную повторяет действия из п. 1.4.
Автор: IvANANvI
Дата сообщения: 15.08.2011 14:34
SergBSI
В ворде тоже давно есть такая возможность. (Описываю 97-2003 ворд)
1. Вид структура
2. Создают гавный документ (появляется новая панель структуры)
3. Потом добавляют вложенные, отдельные ваши документы.
4. Получается один общий документ. Концевые сноски и содержание удобно оставлять в главном документе.
Автор: RoMT
Дата сообщения: 15.08.2011 18:58
Zjaka, с концептуальностью я вряд ли помогу, но попытаюсь описать немного сумбурно как я бы решил используя Visio

отписался тут, так как все-таки больше описано работа в Visio

Страницы: 1234567891011121314151617181920212223242526

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


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