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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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  
     
     
  • Excel VBA все вопросы по Excel VBA туда
  • Access все вопросы по программированию в Access туда
  • Книжульки по VBA - книги по программированию с использованием VBA
     
    Конкретные вопросы/готовые решения:
  • функция возвращает список закладок в документ
     
    Перечень основных ColorIndex'ов из MSDN
     
    - стартовый вопрос топика...

    Смежные темы:
    Программы » Microsoft Office 2019 & 365 | 2016 | 2013 | 2010 | 2007 | 2003
    Программы » OneNote | Outlook 2013 & 2016 & 2019 | Outlook 2010 | Microsoft Mathematics & Math Solver
    Программы » Word FAQ | Excel FAQ | Access FAQ
    Прикладное программирование » Excel VBA | Access VBA  
    Андеграунд » Microsoft Office 2019 | 2016 | 2013 | 2010 | 2007 | 2003
    Андеграунд » OneNote | Visio | SharePoint Server | Project Server | Exchange Server
    Андеграунд » Надстройки (add-ins) и коммерческие макросы Excel
    Андеграунд » Самостоятельная сборка дистрибутивов Оffice 2007/2010/2013/2016 | MUI для Office 2007

  • Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 03:05 01-06-2005 | Исправлено: ALeXkRU, 17:10 03-08-2021
    IvANANvI

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    suomifinland
    Для написания макросов Ворда, не нужно быть программистом, сделано специально для блондинок, две кнопки Плэй (начать запись) и Стоп (Закончить запись), далее делаешь во время записи все, что заблагорассудиться (последовательность повторяющихся действий). Я помогу если, что. В вашем случае, последовательность примерно такая - Ctrl+H (Найти заменить), в поле Найти пишем, что хотим найти (Статья отнесена к разделу), в поле Заменить на - ничего. И однократно нажать кнопку Заменить, если в документе эта фраза не нужна везде, то Заменить все. Все. Клавиша Стоп.

    Всего записей: 762 | Зарегистр. 29-11-2007 | Отправлено: 11:39 12-06-2011 | Исправлено: IvANANvI, 12:09 12-06-2011
    suomifinland



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я это знаю , но дело в том что мне нужно удалить фразу не в одиночном файле , а сделать это одновременно, пакетно в 50 файлах, фраза одна и та же... Вот как автоматом это сделать..? А так конечно, в двух трех файлах это сделать реально, но подумайте открыть 50 файлов.., а если их 2500... Вот о че я речь веду...

    ----------
    Мы на горе всем буржуям, мировой пожар раздуем... А.Блок.

    Всего записей: 5257 | Зарегистр. 16-04-2006 | Отправлено: 12:25 12-06-2011
    Alexey87

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите пожалуйста решить следующую задачку:
    есть строка, в ней может находиться информация следующего типа:
    к.т.н., доцент Кордик В.В.
    или
    ст. преподаватель, В.В. Кордик
    (причем с различным числом знаков препинаний (запятые, точки и др.), пробелов и различным положением инициалов).
    Как автоматизированным способом (например, используя макрос) из такой строки выдернуть инициалы и фамилию и вставить в определенное поле в формате "Фамилия И.О."?

    Всего записей: 655 | Зарегистр. 27-01-2008 | Отправлено: 21:07 12-06-2011
    IvANANvI

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

    Всего записей: 762 | Зарегистр. 29-11-2007 | Отправлено: 22:18 13-06-2011
    suomifinland



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ребята с Вашей помощью написала свой первый макрос.., да гениальное все просто...
    А вот теперь новая задача, "нутром чую" что так можно сделать...
     
     
    Проблема: ... есть работающий макрос, открываю текстовый файл и... запускаю его с помощью горячих клавиш, он все исправляет.., а можно ли сделать так, чтобы при открытии файла, макрос сам, автоматом запускался, и вносил изменения, самостоятельно, в вордовский файл..?  

    ----------
    Мы на горе всем буржуям, мировой пожар раздуем... А.Блок.

    Всего записей: 5257 | Зарегистр. 16-04-2006 | Отправлено: 22:32 13-06-2011
    IvANANvI

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    suomifinland
    Напишите имя вашего макроса, я подправлю под Вас скрипт.

    Всего записей: 762 | Зарегистр. 29-11-2007 | Отправлено: 16:19 14-06-2011
    biznesoft



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    IvANANvI
    Скрипт начинает обрабатывать файлы, открыв первый файл останавливается с ошибкой на строка 36
    Word.Application.Run("SelAbz")
     

    Всего записей: 853 | Зарегистр. 31-03-2011 | Отправлено: 13:14 19-06-2011 | Исправлено: biznesoft, 13:20 19-06-2011
    asbo

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

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 13:58 19-06-2011 | Исправлено: asbo, 23:42 19-06-2011
    IvANANvI

    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    biznesoft
    Похоже вы не создали, макроса с именем SelAbz, я писал, что VBA макросы приложенные, должны быть, прописаны в Word.
    asbo
    Спасибо за код на VBA, просто послал сюда suomifinland, а её оперативно никто не ответил, сам решил немного помочь, немного подрулив не свой код на VBS. Других вариантов не было.

    Всего записей: 762 | Зарегистр. 29-11-2007 | Отправлено: 23:31 19-06-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    IvANANvI
    Да не за что :) Я чуть подправил его - убрал декларации переменных от другого кода - случайно залетели.

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 23:39 19-06-2011
    oshizelly



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А мне никто ничего так и не подскажет http://forum.ru-board.com/topic.cgi?forum=33&topic=5312&start=460#4
     Элементарный же вопрос (для знатоков VBA имею в вижу).

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 10:19 20-06-2011
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oshizelly
    Можно вот так оформить. При этом даже если чего то было выделено, то выделение вернется.

    Код:
    pos_start = Selection.Start
    pos_end = Selection.End
    Selection.WholeStory
    '--------------
    '-------------- Действия с полностью выделенным документом  
    '--------------
    Selection.Start = pos_start
    Selection.End = pos_end


    Всего записей: 2566 | Зарегистр. 25-01-2005 | Отправлено: 13:07 20-06-2011
    biznesoft



    Advanced Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    IvANANvI
    Большое ВАМ САСИБО все работает.

    Всего записей: 853 | Зарегистр. 31-03-2011 | Отправлено: 17:35 20-06-2011
    IvANANvI

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

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

    asbo
    Не получается дополнить ваш код на открытие файла по пути определенной переменной fFile
     
    Вылетает с ошибкой такая строка на открытие:
     Documents.Open FileName:=fFile
     
    Не находит файла если так:
     Documents.Open FileName:=sFile
     

    Всего записей: 762 | Зарегистр. 29-11-2007 | Отправлено: 18:07 20-06-2011 | Исправлено: IvANANvI, 18:09 20-06-2011
    asbo

    BANNED
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    IvANANvI
    fFile - это объектная переменная с типом Variant специально для fso созданная. В указанном контексте 'Documents.Open FileName:=fFile'к ней нет смысла обращаться, и неправильно это.
     
    sFile - это только имя файла. Без пути. Для чего написаго-то 'Debug.Print sFile'? Совсем не обязательно, что Ворд переместился в его папку (проверяется '? CurDir'). Правильно будет сформировать полный путь 'sPath & sFile' и использовать его:
    Documents.Open FileName:=sPath & sFile

    Всего записей: 1805 | Зарегистр. 03-10-2006 | Отправлено: 19:01 20-06-2011
    IvANANvI

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

    Всего записей: 762 | Зарегистр. 29-11-2007 | Отправлено: 21:32 20-06-2011
    oshizelly



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

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 03:00 21-06-2011
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    oshizelly
    Selection.WholeStory достаточно одного раза
     
    А может и не нужно использовать Selection, а задать язык так:
    ActiveDocument.Range.LanguageID = wdEnglishUS
    тогда и выделение не изменится

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 08:25 21-06-2011
    oshizelly



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

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

     
    Тоже красивое решение! А что надо написать вместо "ActiveDocument.", чтобы сделать то же самое в отношении текущего абзаца?

    Всего записей: 6524 | Зарегистр. 18-09-2004 | Отправлено: 11:39 21-06-2011
    smirnvlad

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

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 14:06 21-06-2011 | Исправлено: smirnvlad, 14:25 21-06-2011
    Открыть новую тему     Написать ответ в эту тему

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


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

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru