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

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



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

    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 18:48 01-06-2005
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    А в чем собственно проблемы?
    Есть такие события, как TextBox1_Change, KeyPress, KeyDown,KeyUp, LostFocus, Validate. На эти события можно проверять KeyAscii, KeyCode или весь техт. Есть Timer. Или можно использовать какие-нибудь паразитные циклы для задержки. Есть TextBox2.SetFocus

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 20:38 01-06-2005 | Исправлено: dneprcomp, 20:43 01-06-2005
    exMIB



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    dneprcomp
    Я знаю, что есть такие события.
    Но мозги медленно в VBA соображают, практики мало, приходиться рыскать много в инете, а надо это сделать срочно.

    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 02:24 02-06-2005
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    Кстати, способность менять фокус програмно зависит от версии офиса. 97-й похоже не может.

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 03:22 02-06-2005
    exMIB



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Хорошо, никто конкретно сказать ничего оне хочет.
     
    1. Значит как сделать:
     
    набираем в поле:
     
    1234d56789d
     
    чтобы был счетчик букв "d", когда счетчик насчитает две буквы "d" должен включиться таймер на 3 секунды и через 3 секунды курсор должен перескочить на нижнее текстовое поле, чтобы можно было продолжать в нем ввод.

    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 04:05 02-06-2005
    Sleepwalker



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    ты бы для начала уточнил, что у тебя в документе: форма ввода или отдельный элемент типа TextBox. Для первых событий очень мало (в 2к - только на вход и выход), может в старших версия больше, а вот для второго можно нарисовать  что угодно.
     
    dneprcomp, ты говоришь о TextBox, а я так понял, что автор говорит о формах.
    или я неправильно понял?

    Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 15:00 02-06-2005
    exMIB



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Я сделал форму.
    На форме два поля для ввода текста.
    В первом верхнем поле вводится первый набор символов, далее переход на нижнее поле в котором вводится другой набор символом.
    Далее при нажатии на ENTER, должна производиться обработка запрограммированных операторов (эту часть я запрограммировал уже).
    Работает стабильно.
    Теперь вот эти красивости и нюансы надо как-то сделать, но не могу сообразить как и как лучше их сделать. Опыта мало совсем в VBA.
    Ни одной кнопки на форме нет.
     
    Добавлено:
    Sleepwalker
    А про какой TextBox ты говоришь ?
    Это тот который прямо на лист документа вставлен ?

    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 18:20 02-06-2005 | Исправлено: exMIB, 18:22 02-06-2005
    Sleepwalker



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    лан, по порядку: ты поля для ввода текста создавал как: через панель "формы" или "элементы управления"? в первом случае форму надо "лочить", и становяться активны только поля ввода, во втором случае компонент живет своей жизнью.  
    У тебя какой случай? если первый - ничего не выйдет, если второй, то у TextBox есть соответствующие события, которые тебе нужны.

    Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 19:03 02-06-2005
    exMIB



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ALT + F11
    А там создал форму и на неё поместил поля ввода.
    Ну как обычно, в Delphi к примеру.
    Или в VBA всё необычно  

    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 19:25 02-06-2005
    Sleepwalker



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    ну ты мозги запарил
    тогда все как пареная репа: у полей ввода есть обработчики на клавиши и изменение... вот на них и вешай проверки...

    Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 00:59 03-06-2005
    exMIB



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

    Цитата:
    ну ты мозги запарил  
    тогда все как пареная репа: у полей ввода есть обработчики на клавиши и изменение... вот на них и вешай проверки...

    Болтованя и ещё раз одна болтовня.
    У меня 3 маленьких пункта в самом первом посте.
    Кто процедурки для них напишит буду должен

    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 01:22 03-06-2005
    Sleepwalker



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    С паузой думай сам. Можешь обычным циклом сделать задержку (кстати, МС предлагает это как один из вариантов)
     

    Код:
     
    Public Sub SelectNext(ByVal cur As Integer)
    Dim ct As TextBox
    Set ct = Controls(cur + 1)
    If Right(ActiveControl.Value, 1) = "d" Then
      Controls(cur + 1).SetFocus
      ct.SelStart = 0
      ct.SelLength = Len(ct.Value)
    End If
     
    End Sub
     
    Private Sub TextBox1_Change()
      SelectNext (0)
    End Sub
    Public Sub CheckValue(ByVal valu As String)
      'обработка значения
    End Sub
    Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then CheckValue (ActiveControl.Value)
    End Sub
     
     
    Private Sub TextBox2_Change()
      SelectNext (1)
    End Sub
     
    Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then CheckValue (ActiveControl.Value)
    End Sub
     
    Private Sub TextBox3_Change()
        SelectNext (-1)
    End Sub
     
     
    Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
      If KeyCode = 13 Then CheckValue (ActiveControl.Value)
    End Sub
     
     

     
    Есть вопросы - задавай, только без гонора.

    Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 15:16 03-06-2005
    exMIB



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Sleepwalker
    А можешь комментарии добавить к коду ?
     
    И ещё если здесь ты имеешь ввиду символ, после которого должен происходить переход на другую строку, то дело в том что символ свегда один, но он два раза повторяется.
    Как сделать чтобы только после второго был произведен переход ?
    Желательно сразу в коде.
     

    Цитата:
    If Right(ActiveControl.Value, 1) = "d" Then  


    Всего записей: 3298 | Зарегистр. 27-09-2001 | Отправлено: 03:43 15-07-2005
    vasya123abcde

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А где пропал в 2003 оффисе CommonDialog?

    Всего записей: 4 | Зарегистр. 04-07-2005 | Отправлено: 09:37 15-07-2005
    Maurus



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    А кто знает, как получить текущее количество страниц в документе и как получить кол-во сделанных замен в функции заменить все, там еще окошко выводится "сделано ХХХ замен!"
    Буду очень признателен!

    Всего записей: 61 | Зарегистр. 23-12-2004 | Отправлено: 16:20 01-08-2005
    zeleniy



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

    Цитата:
    А кто знает, как получить текущее количество страниц в документе  

     
    Dim appword as object
    Set AppWord = CreateObject("Word.Application")
     
    If AppWord.Version Like "11*" Then  
       NumOfPages = AppWord.activedocument.ActiveWindow.Panes(1).Pages.Count
      Else
       NumOfPages = AppWord.activedocument.BuiltinDocumentProperties("Number Of Pages").Value
      End If

    Всего записей: 777 | Зарегистр. 07-12-2001 | Отправлено: 16:46 01-08-2005
    NeoKray

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ищу описание объектной модели Word'a. по объектам Selection, Application, Range.
    А именно как выполнить одновременно операцию форматирования, например изменения шрифта над первыми строчками десятью таблиц.

    Всего записей: 22 | Зарегистр. 05-03-2005 | Отправлено: 17:27 01-08-2005
    Sleepwalker



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    exMIB
    о блин, как давно это было.
    насчет второго символа - сделай счетчик и считай значения ввода. Или, как вариант, после нажатия любой кнопки пересчитывать буквы и переходить, если две нужных. Тогда точно с количеством не промахнешься.  
    А комментарии. Что конкретно прокомментировать?

    ----------
    ...или я ничего не понимаю в этой жизни... или понимаю слишком хорошо...

    Всего записей: 1957 | Зарегистр. 19-10-2002 | Отправлено: 18:10 01-08-2005
    KChernov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мне надо в макросе взять текст из буфера обмена, обработать и положить обратно.
    Но тот вариант, который я написал, почему-то ругается при попытке положить текст обратно в буфер (последняя строчка примера).
    Вот:
    Dim MyData As DataObject ' это в общем модуле
    Sub ConvertText()
        Dim splitString As Variant
        Dim joinString As String
        Set MyData = New DataObject
        MyData.GetFromClipboard
        splitString = Split(MyData.GetText(1), " ")
        splitString(1) = splitString(1) & " "
        For i = LBound(splitString) + 1 To UBound(splitString)
            splitString(i) = Mid(splitString(i), 1, 1) & "."
        Next
        joinString = Join(splitString)
        MyData.SetText joinString
        MyData.PutInClipboard
    End Sub
     
    Но вот если в предпоследнюю строчку процедуры вместо переменной поставить константу - все работает?!
    Мб я как-то неправильно формирую строку для буфера? (msgbox отрабатывает без проблем)?
     
    Или мб это вообще как-то иначе нужно делать?..

    Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 12:38 09-08-2005 | Исправлено: KChernov, 16:09 09-08-2005
    Открыть новую тему     Написать ответ в эту тему

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