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

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

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    baston
    Все равно спасибо за помощь.
     
    А вы могли бы написать макрос, который:
     
    1. Переводил бы площадь (которая после таблицы) из квадратных метров в гектары, с округлением до 5-ой цифры? Нужно просто перенести точку на 4 знака влево, округлив последнюю цифру.
    Например, 548.770718 станет 0.0549
     
    2. А затем вставил следующий текст:

    Код:
     га
     
     
     
    Составил инж. землеустроитель                     Иванов А. К.
     
     
     
    Компьютерная обработка                               Петров Н. Р.
     

    [разрыв страницы]

    Всего записей: 366 | Зарегистр. 23-10-2003 | Отправлено: 19:25 31-07-2008 | Исправлено: Kai, 19:34 31-07-2008
    baston



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

    Код:
    Sub table_1()
    Dim oRange As Range
    Dim oTableFrom As Table
    Dim oTableTo As Table
    Dim oRow As Row
    Dim oCell As Cell
    Dim sStr, sStr1, sStr2 As String   'заранее определенный текст
    Const ga As Double = 0.0001  'константа для конвертации м2 в га
    Dim s, s1   'переменные для выделенного числа и результата вычислений
    Dim tb1() As String
    Dim tb2() As String
     
    Set oTableFrom = ActiveDocument.Tables(1)
    Set oRange = Selection.Range
     
    sStr = " га" & vbCr & vbCr & vbCr & vbCr
    sStr1 = "Составил инж. землеустроитель" & vbTab & vbTab & vbTab & vbTab & "Иванов А. К." & vbCr & vbCr & vbCr & vbCr
    sStr2 = "Компьютерная обработка" & vbTab & vbTab & vbTab & vbTab & vbTab & "Петров Н. Р."
     
    ReDim tb1(1 To 20)
    ReDim tb2(1 To 10)
    tb1(1) = "Описание земельных участков. Раздел " & Chr(171) & "Описание границ" & Chr(187)
    tb1(2) = "Кадастровый квартал № ____________________ Изменение №______________________"
    tb1(3) = "СВЕДЕНИЯ О ВНОВЬ ОБРАЗОВАННЫХ И ПРЕКРАЩАЮЩИХ СУЩЕСТВОВАНИЕ УЗЛОВЫХ И ПОВОРОТНЫХ ТОЧКАХ ГРАНИЦ"
    tb1(4) = "Условное обозначение точки"
    tb1(5) = "Координаты"
    tb1(6) = "f, м"
    tb1(7) = "Описание закрепления точки"
    tb1(8) = "Кадастровая запись"
    tb1(9) = "Х"
    tb1(10) = "У"
     
    tb2(1) = "СВЕДЕНИЯ О ВНОВЬ ОБРАЗОВАННЫХ И ПРЕКРАЩАЮЩИХ СВОЕ СУЩЕСТВОВАНИЕ УЧАСТКАХ ГРАНИЦ"
    tb2(2) = "От"
    tb2(3) = "т."
    tb2(4) = "до"
    tb2(5) = "Длина, м"
    tb2(6) = "S, м"
    tb2(7) = "Дирекционный угол"
    tb2(8) = "Описание прохождения границы"
    tb2(9) = "Кадастровая запись"
     
    If Selection.Type = wdSelectionIP Then
       MsgBox "Не выделен текст"
    Else
       s = Selection.Text
       With Selection
          s = Val(s)
          s1 = s * ga
          s1 = Round(s1, 4)
          s = Replace(s, s, s1)
          Selection.Text = s
       End With
         
    'вставляем текст после таблицы
    oRange.EndOf wdStory, wdMove
    oRange.InsertAfter sStr & sStr1 & sStr2
    oRange.Collapse wdCollapseEnd
    oRange.InsertBreak
    oRange.Collapse wdCollapseEnd
    oRange.Select
     
    Set oTableTo = ActiveDocument.Tables.Add(Selection.Range, 6, 6)
    With oTableTo
       .Cell(Row:=1, Column:=1).Merge .Cell(1, 6)
       .Cell(Row:=2, Column:=1).Merge .Cell(2, 6)
       .Cell(Row:=3, Column:=1).Merge .Cell(3, 6)
       .Cell(1, 1).Range = tb1(1)
       .Cell(2, 1).Range = tb1(2)
       .Cell(3, 1).Range = tb1(3)
       .Cell(4, 1).Range = tb1(4)
       .Cell(Row:=4, Column:=2).Merge .Cell(4, 3)
       .Cell(4, 2).Split 2, 1
       .Cell(4, 2).Range = tb1(5)
       .Cell(5, 2).Split 1, 2
       .Cell(5, 2).Range = tb1(9)
       .Cell(5, 3).Range = tb1(10)
       .Cell(4, 3).Range = tb1(6)
       .Cell(4, 4).Range = tb1(7)
       .Cell(4, 5).Range = tb1(8)
       .Borders.Enable = True
    End With
     
    Erase tb1
     
    oRange.EndOf wdStory, wdMove
    oRange.InsertAfter vbCr & vbCr
    oRange.Select
    Selection.Collapse wdCollapseEnd
     
    Set oTableTo = ActiveDocument.Tables.Add(Selection.Range, 6, 9)
    With oTableTo
       .Cell(Row:=1, Column:=1).Merge .Cell(1, 9)
       .Cell(1, 1).Range = tb2(1)
       .Cell(2, 1).Range = tb2(2)
       .Cell(2, 2).Range = tb2(3)
       .Cell(2, 3).Range = tb2(4)
       .Cell(2, 4).Range = tb2(3)
       .Cell(2, 5).Range = tb2(5)
       .Cell(2, 6).Range = tb2(6)
       .Cell(2, 7).Range = tb2(7)
       .Cell(2, 8).Range = tb2(8)
       .Cell(2, 9).Range = tb2(9)
       .Borders.Enable = True
    End With
    End If
     
    Set oTableTo = Nothing
    Erase tb2
     
    End Sub

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 10:40 01-08-2008
    Kai

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    baston
    Да, исходный документ - это то, что выдает другая программа, включая слова "Площадь участка" и собственно площадь.
     
    Макрос работает. Большое спасибо за помощь!

    Всего записей: 366 | Зарегистр. 23-10-2003 | Отправлено: 02:16 02-08-2008 | Исправлено: Kai, 02:18 02-08-2008
    Robert07

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

    Всего записей: 2 | Зарегистр. 12-08-2008 | Отправлено: 13:47 12-08-2008 | Исправлено: Robert07, 12:53 13-08-2008
    shamman

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Мое почтение!
    А может ли кто-нить просветить по такому вопросу: как "склеить" несколько таблиц в одну?
    Количество и ширина столбцов в таблицах одинаковая; таблицы идут подряд, между собой разделены пустой строкой.
    Заранее благодарен.

    Всего записей: 634 | Зарегистр. 06-07-2002 | Отправлено: 22:59 13-08-2008
    kjifl

    Newbie
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    <<< МЕТОДИЧКА >>>
    Пакет макросов для форматирования докуемнтов MS Word
    Разработано на платформе MS Office Word 2003 SP2
    Опробовано на документах полученных ABBYY FineReader 7-8
    Домашняя страница: http://alex-mail.at.tut.by

    Всего записей: 3 | Зарегистр. 03-02-2007 | Отправлено: 06:28 23-08-2008
    KChernov



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Как сделать кнопку/хоткей вставки форматированного текста, чтобы после вставки автоматом применилось форматирование места, куда произведена вставка?

    Всего записей: 2471 | Зарегистр. 20-04-2004 | Отправлено: 13:56 25-08-2008
    Mr KMS

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть файл, имя которого имеет следующий вид:
    дата_самоназвание_код
    Как? Можно ли? реализовать такую возможность, что при создании в документе поля FileName в поле отображалось только самоназвание.

    Всего записей: 1555 | Зарегистр. 05-04-2008 | Отправлено: 23:23 28-08-2008
    agro

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    есть ListBox значения заполняются из Exel листа (multipleSelect включено потому что нужно обеспечить множеств выбор из одного списка)
    есть TextBox в который должно попадать каждое выбранное значение
    (у меня таким образом формируется строка которая вставляется в документ.doc)
    как это сделать?
     
    PS
    я знаю что у ListBox есть свойство ListIndex
    но такая вот процедуда не работает
     
    Private Sub ListBox2_Click()
    Dim r As Variant
        r = ListBox2.ListIndex
        TextBox1.Value = ListBox2.List(r)
    End Sub
     
    помогите пожалуйста очень надо

    Всего записей: 18 | Зарегистр. 12-02-2006 | Отправлено: 20:26 31-08-2008
    dneprcomp



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

    Код:
    Private Sub ListBox1_LostFocus()
         
       Dim r As Integer  
       Dim strTemp As String
         
        If ListBox1.ListIndex = -1 Then
            Exit Sub
        End If
     
        For r = 0 To ListBox1.ListCount  
             If ListBox1.Selected(r) = True Then
                If strTemp = "" Then
                     strTemp = ListBox1.List(r)
                Else
                    strTemp = strTemp & "," & ListBox1.List(r)
                End IF
             End If
        Next r
    End Sub

     
    Mr KMS

    Код:
        strTemp = Mid("дата_самоназвание_код", InStr("дата_самоназвание_код", "_") + 1)
        strTemp = Left(strTemp, InStr(strTemp, "_") - 1)

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 22:02 31-08-2008 | Исправлено: dneprcomp, 22:18 31-08-2008
    agro

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    спасибо большое
    завтра попробую

    Всего записей: 18 | Зарегистр. 12-02-2006 | Отправлено: 23:43 31-08-2008
    DmitryKz

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, как определить физическое, так сказать, расположение объектов Вордовского документа - рисунки, таблицы, примечания, сноски, концевые сноски? Есть коллекции этих объектов и их индексы. Мне нужно в довольно больших по объему документах выцепить эти объекты и создать документ в своем собственном формате средствами Delphi, проиндексировав эти объекты дав им название для быстрого доступа. В VBA новичок.

    Всего записей: 3142 | Зарегистр. 29-09-2005 | Отправлено: 16:18 02-09-2008 | Исправлено: DmitryKz, 16:22 02-09-2008
    mistx

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Друзья подскажите пожалуйста как решить данную задачу?
     
    Есть таблица в ворде - 8 колонок.
     
    1- 12\07\1999
    2- 28\07\1999
    3 - 15
    4- 16
    5- 120000
    6 - хххх.хх
    7- хххх.хх
     
    нужно чтобы получилось без таблицы в одну строку
     
    с 12.07.1999 по 28.07.1999 - 120000 Х 16% Х 15 дн Х хххх.хх
     
    КАк реализовать?
     
    Заранее благодарю

    Всего записей: 765 | Зарегистр. 13-01-2005 | Отправлено: 17:08 02-09-2008
    baston



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

    Цитата:
    Как сделать кнопку/хоткей вставки форматированного текста, чтобы после вставки автоматом применилось форматирование места, куда произведена вставка?

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

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 10:21 06-09-2008
    baston



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

    Цитата:
    Друзья подскажите пожалуйста как решить данную задачу? Есть таблица в ворде - 8 колонок.  

    Вот самому подсказали (таблица удаляется):

    Код:
    Sub colToLine()
    Dim oTable As Table
    Dim oRow As Range
    Dim oRange As Range
    Dim i As Long
    Dim sStr As String
    Dim cText As Variant
     
    Set oTable = ActiveDocument.Tables(1)
    Set oRange = Selection.Range
     
    oRange.EndOf wdStory, wdMove
    oRange.Collapse wdCollapseEnd
    oRange.Select
     
    For i = 1 To oTable.Rows.Count
       Set oRow = oTable.Rows(i).Range
       cText = Split(oRow, Chr(13), -1)
       sStr = "с " & cText(0) & _
             " по " & cText(1) & _
             " - " & cText(4) & _
             " x " & cText(3) & _
             "% x " & cText(2) & _
             " дн x " & cText(5) & vbCr
       sStr = Replace(sStr, Chr(92), ".")
       oRange.InsertAfter sStr
    Next i
     
    oTable.Delete
     
    End Sub

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 20:25 06-09-2008
    baston



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

    Цитата:
    А может ли кто-нить просветить по такому вопросу: как "склеить" несколько таблиц в одну? Количество и ширина столбцов в таблицах одинаковая; таблицы идут подряд, между собой разделены пустой строкой.  

    Вот подходящий макрос (автор не я, а Helmut Weber):

    Код:
    Sub delParSignBetweenTables()
    'удаление знаков абзаца между таблицами с одинаковой структурой
    'но если в документе после таблиц есть текст, а после этого текста
    'идет другая таблица, то текст над этой таблицей будет удален
    Dim oTbl1 As Table
    Dim oTbl2 As Table
    Dim rtmp As Range
    Dim i As Long
    Set rtmp = Selection.Range
    With ActiveDocument
       i = .Tables.Count
       While i > 1
          Set oTbl2 = .Tables(.Tables.Count)
          Set oTbl1 = .Tables(.Tables.Count - 1)
          rtmp.Start = oTbl1.Range.End
          rtmp.End = oTbl2.Range.Start
          rtmp.Delete
          i = .Tables.Count
       Wend
    End With
    End Sub
     

    Всего записей: 39 | Зарегистр. 27-12-2005 | Отправлено: 15:09 07-09-2008
    mistx

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

    Всего записей: 765 | Зарегистр. 13-01-2005 | Отправлено: 19:45 07-09-2008
    vovk_qq

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте не могли бы помочь..
    проблемма в следующем нужно чтоб при отправке на печать документа файл сохранялся в другой папке
     
    Это в  ThisDocument
     

    Код:
    Dim X As New EventClassModule
     
    Private Sub Document_New()
       Set X.App = Word.Application
    End Sub
     
    Private Sub Document_Open()
       Set X.App = Word.Application
    End Sub
     

     
    потом создал новый модуль класса  с именем EventClassModule и в нём
     

    Код:
     
    Public WithEvents App As Word.Application
    ____________________________________________________
    Private Sub app_documentbeforeprint(ByVal Doc As Document, Cancel As Boolean)
     Dim ntime, fpath, dr, fl As String
       ' ActiveDocument.path + "\" + ActiveDocument.Name
       fpaths = "C:\print" + "\" + CStr(Date)
       If (Len("C:\print" + "\" + CStr(Date)) = 0 Or Err = 76) Then
       MkDir ("C:\print" + "\" + CStr(Date))
       End If
        Selection.TypeText Text:=CStr(Date)
        fl = ActiveDocument.Name
        dr = ActiveDocument.path
        ntime = Replace(CStr(Time), ":", "-")
        ChangeFileOpenDirectory "C:\print" + "\" + CStr(Date) + "\"
        ActiveDocument.SaveAs FileName:=ntime + ".doc"
     
     ChangeFileOpenDirectory dr
     ActiveDocument.SaveAs FileName:=fl
       
    End Sub
     

     
    Вот собссно. Проблемма в том что не создаётся папка с текущей датой в имени, и событие beforeprint обрабатывается при предварительном просмотре, ctrl+p и  ессно файл>печать.....  А нужно только когда документ уже отправлен на принтер, тоесть перед самой печатью.  
    Может ктонибудь знает как это решить?
     
    ЗЫ:
    Переменная fpaths в общемто лишняя, пытался подставлять её ничего не меняется.

    Всего записей: 1 | Зарегистр. 04-11-2007 | Отправлено: 17:22 08-09-2008 | Исправлено: vovk_qq, 19:04 08-09-2008
    Ilov_Alex

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Подскажите как перескочить сразу к последней строке в документе? А то цикличиские переходы по одной строчке туда-сюда весьма трудоёмки для объёмного списка.

    Всего записей: 20 | Зарегистр. 26-06-2008 | Отправлено: 06:01 19-09-2008
    dneprcomp



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ilov_Alex
    попробуй  
        Selection.EndKey Unit:=wdStory
        Selection.HomeKey Unit:=wdStory
        Selection.MoveDown Unit:=wdScreen, Count:=2
        Selection.MoveUp Unit:=wdScreen, Count:=2

    Всего записей: 3920 | Зарегистр. 31-03-2002 | Отправлено: 06:35 19-09-2008
    Открыть новую тему     Написать ответ в эту тему

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