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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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

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

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    smirnvlad, спасибо. Я уже пробовал этот пример. Код, кот. я приводил, сделан из этого примера .  Что-то, похоже, с системой не так. Потому что файл scrrun.dll -- есть, в Reference на него указано. Видимо, нужно обновить этот файл что ли.

    Всего записей: 80 | Зарегистр. 16-10-2008 | Отправлено: 11:32 12-11-2010
    smirnvlad

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vaulin
    так а пример работает?
     
    Set fdrFolder = fsoSysObj.GetFolder(strPath)
    5: Invalid procedure call or argument у меня выскакивает если strPath Empty
     

    Всего записей: 417 | Зарегистр. 31-03-2009 | Отправлено: 11:57 12-11-2010
    vaulin

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всё, smirnvlad, заработало! Пример не работал изначально. Дело, как я понял, было в том, что я перенес вначале файл scrrun.dll из system32 в system (купился на MS help) и попытался оттуда подключить эту библиотеку. Сейчас всё вернул на место, отключил эту библиотеку и подключил заново. Всё, пример заработал. Я туда еще добавил строчку "MsgBox dctDict.Count" и он выдает кол-во файлов на диске "С". Спасибо, smirnvlad, за поддержку!
     

    Всего записей: 80 | Зарегистр. 16-10-2008 | Отправлено: 12:59 12-11-2010 | Исправлено: vaulin, 13:00 12-11-2010
    exec228

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    салют!
    у меня постоянный гемор с мсвордом - сквозной вложенной нумерацией. начиная с версии 95.
     
    то есть я не могу добиться стабильной работы ворда в отношении форматирования глав и пунктов:
     
    1.Заголовок первого уровня
    1.1.Пункт одын-одын
    1.2.Заголовок второго уровня
    1.2.1.Пункт одын-два-одын
    хочется, чтобы запуском макроса я стандартизовал стили заголовков и списков как в новых документах, так и в присланных мне.
     
    я борюсь с этим уже пятнадцать лет, раз в квартал. с большим трудом наваял себе normal.dot, который работает полгода, затем умирает в смысле сквозного вложенного форматирования.
     
    основная проблема, как я понял в том, чтобы:
     
    а)заставить заголовки и пункты опираться на одну нумерацию "1/1.1/1.1.1", причём на ту же самую среди всех, которые называются "1/1.1/1.1.1". это фаза луны на всех моих инсталляциях.
     
    б)ListGalleries(wdOutlineNumberGallery).ListTemplates(N).ListLevels(8) - вот эта N сильно плавает от документа к документу, от редакции документа к редакции. а может даже от запуска ворда к другому запуску.
     
    сейчас попытался задать
            With ListGalleries(wdOutlineNumberGallery).ListTemplates(i).ListLevels(1)
                .NumberFormat = "%1."
                .TrailingCharacter = wdTrailingSpace
                .NumberStyle = wdListNumberStyleArabic
                .NumberPosition = CentimetersToPoints(0)
                .Alignment = wdListLevelAlignLeft
                .TextPosition = CentimetersToPoints(0)
                .TabPosition = wdUndefined
                .ResetOnHigher = 0
                .StartAt = 1
                With .Font
                    .Bold = wdUndefined
                    .Italic = False
                    .StrikeThrough = False
                    .Subscript = False
                    .Superscript = False
                    .Shadow = False
                    .Outline = False
                    .Emboss = False
                    .Engrave = False
                    .AllCaps = False
                    .Hidden = False
                    .Underline = False
                    .Color = False
                    .Size = False
                    .Animation = False
                    .DoubleStrikeThrough = False
                    .Name = ""
                End With
                .LinkedStyle = ""
            End With
    для всех N от 0 до 100
     
    но к должному результату это не приводит - либо заголовки имеют тонкие цифры, либо пункты имеют жирные цифры. либо кнопочка "нумерация" на тулбаре превращает любое форматирование абзаца в стиль "Заголовок 1".
     
    как схватить стиль за яйца?
    или как по другому решить задачку?
     
    в принципе, я уже и готов в течение 10 дней выдать победителю 50 баксов.
    если есть желающие, могу сформулировать подробное ТЗ на макрос.

    Всего записей: 2 | Зарегистр. 23-05-2006 | Отправлено: 22:13 15-11-2010
    dummy84

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте!  
     
    Есть проблема, не получается написать макрос для форматирования полей документа
    (верхнее, левое) так чтобы остальные параметры документа не изменялись, тоесть только необходимо изменять поля  на величину указанную пользователем. Если кто то сталкивался с такой проблемой или просто знает как ее решить, то пожалуйста подскажите?  

    Всего записей: 29 | Зарегистр. 11-07-2007 | Отправлено: 19:52 29-11-2010
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dummy84
    А в чем проблема то?
    Записываешь макрос, потом редактируешь его, убирая все лишнее и получается
     

    Код:
     
    Sub Макрос15()
    '
    ' Макрос15 Макрос
    '
    '
       With ActiveDocument.Styles(wdStyleNormal).Font
            If .NameFarEast = .NameAscii Then
                .NameAscii = ""
            End If
            .NameFarEast = ""
        End With

    'То что вверху не знаю почему появилось ,
        With ActiveDocument.PageSetup
           .LineNumbering.Active = False
            .Orientation = wdOrientPortrait
           .TopMargin = MillimetersToPoints(15)
            .LeftMargin = MillimetersToPoints(10)
           .BottomMargin = MillimetersToPoints(20)
            .RightMargin = MillimetersToPoints(15)
            .Gutter = MillimetersToPoints(0)
            .HeaderDistance = MillimetersToPoints(12.7)
            .FooterDistance = MillimetersToPoints(12.7)
            .PageWidth = MillimetersToPoints(210)
            .PageHeight = MillimetersToPoints(296.9)
            .FirstPageTray = wdPrinterDefaultBin
            .OtherPagesTray = wdPrinterDefaultBin
            .SectionStart = wdSectionNewPage
            .OddAndEvenPagesHeaderFooter = False
            .DifferentFirstPageHeaderFooter = False
            .VerticalAlignment = wdAlignVerticalTop
            .SuppressEndnotes = True
            .MirrorMargins = False
            .TwoPagesOnOne = False
            .BookFoldPrinting = False
            .BookFoldRevPrinting = False
            .BookFoldPrintingSheets = 1
            .GutterPos = wdGutterPosLeft

        End With
    End Sub

    Дополнительно можно вставить запрос на эти параметры типа  
     InputBox("Размер левого поля", "Запрос", L_pole)
    ------------------------------------
    И вот к примеру с запросом простенько, без проверки на корректность

    Код:
    Sub Смена_полей()
        On Error Resume Next 'не останавливаться на ошибках
        With ActiveDocument.PageSetup
            .TopMargin = MillimetersToPoints(InputBox("Верхнее поле, мм", "Запрос", PointsToMillimeters(.TopMargin)))
            .BottomMargin = MillimetersToPoints(InputBox("Нижнее поле, мм", "Запрос", PointsToMillimeters(.BottomMargin)))
            .LeftMargin = MillimetersToPoints(InputBox("Левое поле, мм", "Запрос", PointsToMillimeters(.LeftMargin)))
            .RightMargin = MillimetersToPoints(InputBox("Правое поле, мм", "Запрос", PointsToMillimeters(.RightMargin)))
        End With
    End Sub
     

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 12:08 30-11-2010 | Исправлено: Gena1971, 13:34 30-11-2010
    vvvvv2



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

    Цитата:
    [/q][q]салют!  
    у меня постоянный гемор с мсвордом - сквозной вложенной нумерацией. начиная с версии 95.

     
    Может я чего-то не понял?!... Вероятно, у вас проблемы в работе со стилями.
    В своих документах у меня не бывает проблем, т.к. в нормал.дот вшиты нужные стили, а из чужих документов на вба удаляю все стили и импортирую свои из нормал.дот. Если свои стили четко не применились, то можно и поабзацно пробежаться макросом через "если стиль" и принудительно назначать стиль. ВБА может все, а подключение библиотеки ВБС - это "смертельное оружие"...
    И я не ленюсь вообще со всего текста снять форматирование и удалить стили, а потом все сделать по своему, многое - через ВБА. Почистить, назначить стили рисункам и таблицам, подписям к ним.  
    Я не автоматизирую редактирование на 100%, что было бы вредно, а пользуюсь раздельно порядка 3-х десятков макросов, заточенных под конкретные цели. В итоге, считаю скорость обработки приемлемо быстрой.
    Если же в доке оставлять старые стили, то ... фиг знает, как будет все это... Не пробовал и не хочу...

    Всего записей: 108 | Зарегистр. 16-07-2007 | Отправлено: 23:37 02-12-2010
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    vvvvv2 22:37 02-12-2010
    Цитата:
    а подключение библиотеки ВБС - это "смертельное оружие"...

    А об этом можно побольше узнать. Я тоже в так работаю, но о "смертельном оружии" не в курсе.

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 00:49 03-12-2010
    BagaBaga

    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Dear All,
    VBA не знаю совсем. Да и API ворда. Есть такая проблема, может кто поможет скриптом.
     
    Есть выделенная область. Нужно ее транслитирировать (таблица транслитерации есть, например, там - http://gsnti-norms.ru/norms/common/doc.asp?0&/norms/stands/7_79.htm). Некириллические символы оставить - т.е. не трогать и не менять. Office 97Pro.
     
    Задача, к сожалению, постоянная (не разовая).

    Всего записей: 463 | Зарегистр. 14-11-2005 | Отправлено: 18:22 22-12-2010
    Gena1971



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    BagaBaga
    А PuntoSwitcher не подойдет? И переключатель клавиатуры, и автосмена раскладки, и в том числе транслитерация туда и обратно. И на клавиатуру можно это настроить.
    Хотя в принципе и макрос не сильно сложный должен быть.

    Всего записей: 2567 | Зарегистр. 25-01-2005 | Отправлено: 18:29 23-12-2010
    kuvschin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую!
     
    Есть требование по количеству знаков в строке.
    Подскажите, каким образом можно соблюсти его в Word?
     
    Спасибо!

    Всего записей: 4 | Зарегистр. 16-06-2010 | Отправлено: 16:10 21-01-2011
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kuvschin
    Ну, если грубо и быстренько делать, то я бы установил моноширокий шрифт. Набил бы нужное количество знаков и по полученной строке установил марджины для всех стрниц документа. Потом печатать только этим шрифтом и только таким размером. Правда, при выборе заглвных букв строке может не хватить места.
    Каждую строку обязательно переводить на новую только через Enter.
    После окончания печати марджины можно передвинуть и поменять шрифт на любой другой. И размер тоже можно менять.  
    А не грубо и элегантно что-то в голову не приходит.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:39 21-01-2011
    kuvschin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Это слишком грубо ...
     
    Может быть хотя бы подскажете, как обратиться в VBA к текущему значению "номер столбца на странице"? Что-то я никак не найду ...
     
    Тогда можно будет найти максимальное значение этой переменной для документа ...

    Всего записей: 4 | Зарегистр. 16-06-2010 | Отправлено: 10:26 24-01-2011
    dneprcomp



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

    Цитата:
    как обратиться в VBA к текущему значению "номер столбца на странице"?  

    Да откуда в Word может взятся столбец? Столбец подразумевает, что все и каждый знак находятся точно и обязательно друг под другом. При использовании всевозможных фонтов и стилей такого просто быть не может.
    Наиболее близким к искомому будет функция Len
    http://www.oreilly.de/catalog/lrnwdpr/chapter/ch07_03.html
    Там же могут пригодиться Left, Right, Mid функции. Ну и другие.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 07:54 25-01-2011
    kuvschin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dneprcomp
     
    Вы черезчур категоричны ...
    Номер столбца на страницы вполне даже существует и ничего он не предполагает, кроме номера символа от левого края ...
    Его можно вывести в строку состояния.
     
    Впрочем, все оказалось вполне просто ...
     
    x = Selection.Start
    x = Selection.End  
     
    эти значения дают номер символа, включая левое поле,
     
     
     
     
     
     

    Всего записей: 4 | Зарегистр. 16-06-2010 | Отправлено: 10:15 25-01-2011
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kuvschin
    Selection Object represents the current selection in a window or pane.  
    A selection represents either a selected (or highlighted) area in the document, or it represents the insertion point if nothing in the document is selected.  

    Ну, если так уж хочется называть selection столбцом, то называйте. Главное, что бы задачу помогло решить.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 17:40 25-01-2011
    kuvschin

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Selection - это просто курсор (в том числе). т.е. находясь в конце строки, имеем её длину в знаках ... С учетом выбранного шрифта.  
    Столбцом не я называю - Microsoft. трудности перевода ...

    Всего записей: 4 | Зарегистр. 16-06-2010 | Отправлено: 18:20 25-01-2011
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    kuvschin
    Ну, извините. Как спросили, так и ответили. Спросили бы о позиции курсора, не пришлось бы о пресловутых "столбцах" рассуждать.
     

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 01:00 26-01-2011
    sashko1980



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Подскажите, как в Word 2007 сделать следующее:
     
    В документе есть элемент управления содержимым в виде раскрывающегося списка вида "Иванов, Петров, Сидоров". Далее в документе есть другой элемент управления содержимым, где каждой указанной выше фамилии соответствует числовой код, типа "1001, 1002, 1003".
     
    Как сделать, чтобы при выборе фамилии в одном элементе, в другом элементе управления содержимым автоматически подставлялся нужный числовой код?

    Всего записей: 323 | Зарегистр. 01-03-2006 | Отправлено: 23:15 02-04-2011
    vasiliy74



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    не нашёл решения как работать с рецензированием при записи макросов ни как не записывается, суть автоматическое формирование протокола расхождений при работе с документом в режиме рецензирования, может кто задавался там вопросом?

    Всего записей: 289 | Зарегистр. 21-02-2006 | Отправлено: 15:56 08-04-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