Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Word VBA

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

exMIB



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   

 
Обсуждаем вопросы только по Word VBA
(программирование макросов, скриптов, пользовательских функций и т.п.).
Приветствуются ссылки на ресурсы и справочную литературу по теме.
 
Вопросы по работе с MS Word, не относящиеся к программированию, задаем в теме Microsoft Word

 
Обратите внимание, этот топик для помощи в изучении и использовании VBA. Посему запросы типа "Напишите мне такой-то макрос, я VBA не знаю и знать не хочу" не приветствуются.
Древняя мудрость: "Накорми голодного рыбой и он погибнет, научи его ловить рыбу и ты спасешь его."(R)
 
Рекомендации:
Если у Вас есть проблема, не решаемая стандартными средствами Word (об этом можно уточнить здесь) или требующая автоматизации, попробуйте для начала записать макрос самим Word (на вкладке Разработчик - Запись Макросов). Подробнее здесь. В большинстве случаев получившийся код (Разработчик-Макросы-Макрос-Изменить или Разработчик-Visual Basic) Вас не удовлетворит, но подскажет, какие объекты-методы-свойства использовать.  
Другой Ваш помощник - Просмотр объектов (Object Browser). Ну и встроенная помощь (F1), естественно.
 
Если Вы в тупике, покажите Ваш код (или часть кода) здесь.  Если вылезает ошибка, цитируйте ее полностью. Если код слишком большой, используйте тeг [more].
Используйте отладчик - Breakpoints (F9), Watches (Shift-F9), Steps (F8 и др.) Сильно облегчает поиск ошибок.

 
Рекомендуется к прочтению:
  • Начало работы с VBA в Word 2010
  • Microsoft Visual Basic for Application. Осетрова И.С., Осипов Н. А. Учебное пособие (руководство по программированию на VBA в MS Office)  
  • Введение в VBA для приложений MS OFFICE
  • Word и его объекты. Лекция из курса «Основы офисного программирования и документы Word»
  • WinApi. Лекция из курса "Основы офисного программирования и язык VBA" (для продвинутых)
  • Справка по VBA
  • Microsoft Word Visual Basic Reference - руководство по VBA (eng.)
  • Справочник по Word VBA
  • Блог Александра Гуревича  - тематический блог: советы по работе с Word и Excel и прочие материалы
  • Форум по VBA, Excel и Word Макросы в Word -тематический форум, готовые решения
  • Список полезной литературы по Word и программированию на VBA
  • Подборка решений на VBA для Word  
     
     
    Родственные топики:
  • Вопросы по работе с Microsoft Word - часть 1, часть 2
  • Технические проблемы с Microsoft® Office® 2016 | Microsoft® Office® 2013 | Microsoft® Office® 2010 | Microsoft® Office® 2007 | Microsoft® Office® 2003
     
     
  • Excel VBA все вопросы по Excel VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы/готовые решения:
  • функция возвращает список закладок в документ
     
    Перечень основных ColorIndex'ов из MSDN
     
    - стартовый вопрос топика...

  • Всего записей: 2929 | Зарегистр. 27-09-2001 | Отправлено: 03:05 01-06-2005 | Исправлено: ALeXkRU, 11:40 02-07-2018
    sashko1980



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    msmih
    мне тоже интересно, как у вас получится это реализовать. Хотелось бы, чтобы тот текст в документе, который назван Событие мог быть элементом управления содержимым (Ворд 2007 и старше ). Гуру VBA, пожалуйста ответьте!

    Всего записей: 321 | Зарегистр. 01-03-2006 | Отправлено: 02:01 31-07-2014
    mrdime



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет,
    Такой вопрос: в документе куча линий и рамок, созданных из тех же линий (объекты 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 раз. В чем проблема, почему он не удаляет все с первого прохода?

    Всего записей: 2656 | Зарегистр. 04-01-2005 | Отправлено: 12:33 31-07-2014
    msmih



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

    пока мыслей никаких. я не могу понять как определять дату. по сути это обычный текст.
    Навскидку некая генерация от 1 января по 31 декабря. И абзац равен этой генерации. Только как сделать ума не приложу

    Всего записей: 1151 | Зарегистр. 29-01-2006 | Отправлено: 19:27 31-07-2014
    surgutfred



    Full Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Нужно как то автоматизировать задачу:
    есть штук 50 текстовых файлов в DOS кодировке с кирилицей, нужно их пересохранить в docx формат. Без VBA это не сделать я так понимаю. Когда то пару макросов в excel писал, так что начальное представление имею, но не глубоко. Есть пример поковырять?

    Всего записей: 589 | Зарегистр. 21-08-2001 | Отправлено: 15:33 15-08-2014
    vavavol



    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Ребята, может, подскажет кто-небудь? В VBA формирую вордовский документ. Алгоритм такой: есть два открытых программно документа - временный и основной. В временный загружаю шаблон из файла, вставляю закладки, потом Cut - Paste в основной. Ну, и так далее набиваю основной. Но вопрос не в этом. В конце после сохранении основного документа с помощью Save As при параметре wdFormatDocument97 в начале каждой страницы появляются пустая строка. А при wdFormatDocumentDefault  - нормально. Что это за строка и как это побороть?

    Всего записей: 171 | Зарегистр. 25-01-2006 | Отправлено: 13:17 27-08-2014
    niccolo

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Народ - подскажите - есть ли средство поменять в распознанном тексте все подписи к рисункам и названия таблиц на соответствующие ссылки в Ворд с предварительной настройкой способа нумерации, а также строки, пронумерованные но имеющие стиль простой текст, сделать заголовками соответствующего уровня, например 1. Введение - чтобы стало нумерованным  заголовком 1-го уровня Введение, 1.2 Назначение - нумерованным заголовком 2-го уровня и т.п.?

    Всего записей: 2158 | Зарегистр. 17-09-2001 | Отправлено: 18:08 15-09-2014
    dezak20x

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

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

    Всего записей: 148 | Зарегистр. 21-11-2003 | Отправлено: 09:08 16-09-2014
    sam29

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Добрый день!
    Есть небольшая задача, с VBA пока хорошо не общался.
    Как найти часть текста ( ХХХ: ) даже в таблицах и с последнего символа +1 взять 20 и присвоить переменной.  

    Всего записей: 2 | Зарегистр. 21-03-2008 | Отправлено: 16:40 04-11-2014
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как на VBA WORD воплотить такую задачу?
    А именно рандомная(случайная) замена слов, т.е.
    Например, слово "поэтому"  встречается 100 раз можно ли его занимать в случайном порядке этими словами
    -иными словами
    -следовательно
    -таким образом можно заключить, что
    -поэтому мы можем сделать вывод о том, что
    -исходя из этого мы делаем вывод о том, что
    -то есть
    -таким образом мы делаем вывод о том, что
     
    но чтобы слово поэтому тоже было в тексте. Например, 100 слов это 100%  
    у нас  8 слов, соответственно, надо чтобы 12% слов было слово иными словами, 12% слово следовательно, 12% слово таким образом можно заключить, что... и так далее
    12*7=84
    а 16 процентов это слово поэтому.
    но все эти слова случайно распределялись в тексте.
    Можно ли такое сделать?

    Всего записей: 345 | Зарегистр. 02-04-2011 | Отправлено: 14:09 21-11-2014
    ALeXkRU



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fsp050

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

    включить и его в этот список слов для замены...  
    Тогда при случайном выборе из этого списка строк (массива) оно будет также встречаться, как и другие

    Всего записей: 10149 | Зарегистр. 03-12-2003 | Отправлено: 16:04 21-11-2014
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ALeXkRU
    а как это делать?) Я немного не программист)

    Всего записей: 345 | Зарегистр. 02-04-2011 | Отправлено: 17:56 21-11-2014
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    доброго времени суток!
     
    возникла задачка по удалению из документа разрывов раздела (которые натыканы по 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

    и

    Код:
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        With Selection.Find
            .Text = "^p"
            .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

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

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1449 | Зарегистр. 17-07-2009 | Отправлено: 23:50 06-12-2014 | Исправлено: 5peciali5t, 23:52 06-12-2014
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время, 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
     

    PS. А задачи на bat какое отношение к VBA имеют???

    Всего записей: 1541 | Зарегистр. 07-08-2002 | Отправлено: 00:53 07-12-2014 | Исправлено: Alex_Piggy, 00:56 07-12-2014
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Alex_Piggy
    огромное спасибо за отклик!
    задачи на bat к vba отношения не имеют, я просто надеялся что если эту ветку никто не мониторит, то в топике по bat файлам с большой вероятностью найдутся разносторонне образованные в этом плане специалисты
    ваш скрипт на примере простого документа без таблиц отрабатывает как надо, но в моем случае задача оказалась немного сложнее.
    нужно объединить верхние и нижние границы таблиц, между которыми если включить отображение непечатаемых символов стоят разрывы строк и разрыв раздела, которые находятся по ^p и ^b но почему-то не обрабатываются скриптом
    пример сформированного документа который нужно обработать http://pion.rghost.net/59474105
    ума не приложу если честно почему в простом документе работает, а моем нет

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1449 | Зарегистр. 17-07-2009 | Отправлено: 17:59 07-12-2014
    Alex_Piggy

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Доброе время, 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
     

    Если есть нужный текст между таблицами, то вместо "rng.Delete" использовать "If rng.Characters.Count=1 Then rng.Delete"

    Всего записей: 1541 | Зарегистр. 07-08-2002 | Отправлено: 19:03 07-12-2014
    5peciali5t



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Alex_Piggy
    эффект просто потрясающий!
    все именно так, как и требовалось сделать.
    огромное спасибо за помощь!

    ----------
    Intel Ci7-2600K 3.4@4.5 Ghz/GeForce GTX 550 Ti 1024Mb/240Gb SSD+9Tb HDD's/RAM 16 Gb DDR3 1600/23" ACER T231Hbmid Multi-Touch Sensor Display

    Всего записей: 1449 | Зарегистр. 17-07-2009 | Отправлено: 20:35 07-12-2014
    Futurism

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите, пожалуйста, как сделать, чтобы в документе слова менялись на синонимы из этого словаря
    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

    Всего записей: 1179 | Зарегистр. 04-02-2011 | Отправлено: 17:54 26-12-2014
    RomanoSadovnik

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Futurism
    Писать скрипт для всех падежей и склонений - занятие неблагодарное. Как идею могу предложить выдрать готовую dllку с Орфо (ссылка на варезник в шапке, мануал в pdf по функциям в ней есть на сайте разработчика), зарегить её (внимательнее с System32 or SysWOW64, если что), а словарь синонимов брать формат не txt (оценить ваш с rghost не могу - удалён), а переконвертированный html -> doc (на Флибусте в html пока есть).

    Всего записей: 47 | Зарегистр. 23-10-2010 | Отправлено: 02:57 08-03-2015 | Исправлено: RomanoSadovnik, 02:59 08-03-2015
    Fsp050

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите, пожалуйста, школяру)
    Я взял ряд рефов и диссеров и скопировал нужные мне из них части в один общий документ.
    Т.о. у нас есть  
    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.
     
    помогите, плиз такой макрос сделать.
     

    Всего записей: 345 | Зарегистр. 02-04-2011 | Отправлено: 17:39 01-05-2015
    ptr73

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    вручную всё перемолотить будет быстрее, чем подобный макрос написать и отладить

    Всего записей: 251 | Зарегистр. 03-07-2007 | Отправлено: 09:10 02-05-2015
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 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

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Word VBA

    Имя:
    Пароль:
    Сообщение

    Для вставки имени, кликните на нем.

    Опции сообщенияДобавить свою подпись
    Подписаться на получение ответов по e-mail
    Добавить тему в личные закладки
    Разрешить смайлики?
    Запретить коды


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.Board
    © Ru.Board 2000-2018

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru