Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Word VBA

Автор: clstl
Дата сообщения: 18.08.2011 00:09
Как в тексте Word XP програмно заменить слово, например, "молоко" полем со списком где первым словом будет "молоко", а ниже нужные значения: "кефир", "сметана", "творог". И с помощью элемента управления "поле со списком" вставить в текст нужное в данном случае?

Автор: Gena1971
Дата сообщения: 18.08.2011 13:04
clstl
Не знаю как XP, но наверное также. Поиском и заменой надо применить вот такого плана команды:

Код: Selection.Range.ContentControls.Add (wdContentControlComboBox)
Selection.ParentContentControl.Title = "молочные продукты"
Selection.ParentContentControl.Tag = "молоко"
Selection.ParentContentControl.DropdownListEntries.Add Text:="молоко", Value:="молоко"
Selection.ParentContentControl.DropdownListEntries.Add Text:="кефир", Value:="кефир"
Selection.ParentContentControl.DropdownListEntries.Add Text:="сметана", Value:="сметана"
Selection.ParentContentControl.DropdownListEntries.Add Text:="творог", Value:="творог"
Selection.ParentContentControl.Range.Text = Selection.ParentContentControl.DropdownListEntries.Item(3).Text
Selection.ParentContentControl.LockContentControl = True
Автор: clstl
Дата сообщения: 18.08.2011 21:39
Спасибо, попробую, результат сообщу.

Приятно иметь дело!
Автор: slonni
Дата сообщения: 22.09.2011 22:05
Как можно просмотреть доступные цветовые схемы с помощью VBA ?
Автор: sashko1980
Дата сообщения: 08.10.2011 23:38
Прошу помочь с кодом для такой задачи: есть 2 элемента управления содержимым типа "выбор даты". Первый называется "дата госпитализации", второй - "дата выписки". Далее есть третий элемент управления типа "текст" называемый "количество дней в стационаре". Нужно чтобы после заполнения первых двух полей автоматически считалось количество дней в третьем поле. С условием, что день госпитализации и день выписки в сумме дают один день ( то есть, дата госпитализации - 1 января 2011, дата выписки - 3 января 2011, дней в стационаре -2).
Пример файла: days.docx

Для похожей задачи, где по разнице двух дат вычислялся возраст, прекрасный код подсказал smirnvlad

Пытался изменить этот код, чтобы считалась разница в днях, но не осилил (не получилось, чтобы правильно считалась разница при переходе дат через месяц или год). Очень надеюсь, что smirnvlad откликнется и на этот раз
Автор: smirnvlad
Дата сообщения: 09.10.2011 19:42
sashko1980
в том коде поменять строку
yd = DateDiff("yyyy", dB, dR)
на
yd = DateDiff("d", dB, dR)
а между комментариями - удалить

ворда под рукой нет, не проверял
Автор: sashko1980
Дата сообщения: 10.10.2011 20:45
smirnvlad
Работает! Спасибо, вот все как просто. А я менял дни на годы в другой строке.
Автор: rrromano
Дата сообщения: 13.10.2011 09:47

Цитата:
Как можно просмотреть доступные цветовые схемы с помощью VBA ?


Не нашёл способа. Может, есть, но уж очень экзотический.
Автор: slonni
Дата сообщения: 14.10.2011 22:35
А как сделать так чтобы при изменении цветовой схемы цвет текста не менялся автоматичски?
Автор: AndVGri
Дата сообщения: 17.10.2011 07:54
rrromano
Чего ж экзотический?
Лежат Environ$("ProgramFiles") & "\Mircrosoft Office\Document Themes " & Mid$(Application.Version, 1, InStr(Application.Version, ".") - 1)
Автор: rrromano
Дата сообщения: 19.10.2011 09:59
AndVGri
Чёрт, а ведь и правда...
У меня в C:\Program Files\Microsoft Office\Document Themes 12
Автор: SEdefor
Дата сообщения: 26.10.2011 10:57
Хм, не там задал первый раз, повторюсь:

День добрый.

Так сложилось, что текст получен из html и все таблицы пришли с нулевым значением интервала между ячейками. На практике это приводит к появлению двойных границ каждой ячейки в таблице. Дабы этого избежать, параметр "Интервал между ячейками" можно отключить вручную. Однако... Таблиц то море.. А в макрос я могу записать только конкретное число большее либо равное нулю..
Есть ли возможность в VBA "снять галочку" с параметра spacing для каждой таблицы?
Пример кода приложу, дабы не быть голословным:

Код:
Sub Tables()
'
'
'
Dim i As Integer
Dim Acount As Integer
Acount = ActiveDocument.Tables.count
For i = 1 To Acount
ActiveDocument.Tables(i).Spacing = 0 'приводит к появлению сдвоенных границ
Next
End Sub
Автор: AndVGri
Дата сообщения: 27.10.2011 01:44
SEdefor
Где-то так можно забороть

Код:
Private Sub SetBorder(ByVal forBorder As Border)
With forBorder
.LineStyle = wdLineStyleSingle
.LineWidth = wdLineWidth025pt
.Color = wdColorAutomatic
End With
End Sub

Public Sub Test()
Dim pTStyle As Style, pTable As Table
Set pTStyle = ActiveDocument.Styles.Add("New Table3", WdStyleType.wdStyleTypeTable)
SetBorder pTStyle.Table.Borders(wdBorderBottom)
SetBorder pTStyle.Table.Borders(wdBorderHorizontal)
SetBorder pTStyle.Table.Borders(wdBorderLeft)
SetBorder pTStyle.Table.Borders(wdBorderTop)
SetBorder pTStyle.Table.Borders(wdBorderVertical)
SetBorder pTStyle.Table.Borders(wdBorderRight)
For Each pTable In ActiveDocument.Tables
pTable.Style = pTStyle
Next pTable
End Sub
Автор: indapublic
Дата сообщения: 01.12.2011 14:08
Как перемещаясь по обычному Word-тексту с помощью команд:

Selection.MoveRight Unit:=wdCharacter, Count:=1 ' ВПРАВО на 1 позицию

Selection.MoveDown Unit:=wdLine, Count:=1 ' ВНИЗ на 1 строк

If Selection = ????? Then <На обработку конца текста>

Отыскать конец текст
Автор: Gena1971
Дата сообщения: 01.12.2011 16:14
indapublic
Сравнить

Код: Selection.End и (ActiveDocument.Characters.Count - 1)
Автор: indapublic
Дата сообщения: 02.12.2011 15:07
Ага, понятно, буду дальше пробовать
Автор: Gena1971
Дата сообщения: 02.12.2011 15:32
indapublic
А зачем такие сложности с перемещением? Не проще ли обрабатывать слова/символы/абзацы?
Конструкцией типа

Код: For Each ___ in ___
..................
..................
next
Автор: indapublic
Дата сообщения: 03.12.2011 03:01
Я не силен в VBA и не очень понял как обрабатывать слова-абзацы. Упор делаю именно на перемещение по тексту.
Автор: Gena1971
Дата сообщения: 03.12.2011 04:46
indapublic
вот я написал в теме ворда

Код: Sub XXX()
On Error Resume Next
For Each tarakan In Selection.Columns.First.Cells
tarakan.Range.Words.First.Bold = 1
Next
End Sub
Автор: indapublic
Дата сообщения: 04.12.2011 13:03
Спасибо, буду использовать
Автор: indapublic
Дата сообщения: 08.12.2011 10:30
еще вопросик можно:
в документе две надписи. Мне нужно скопировать их в тот же документ, пониже
Копирование самих надписей я добился - но не могу скопировать содержимое.
Не могу определить содержимое надписи, чтобы его скопировать в новую.
Подскажите пожалуйста.
вроде бы задание не сложное, но не получается.
Автор: indapublic
Дата сообщения: 11.12.2011 04:37
Не могу понять - все так сложно или наоборот - так элементарно, что никто не считает возможным пару строк черкануть. Без всяких претензий - реально не могу понять ситуацию.
Автор: Lightingee
Дата сообщения: 19.12.2011 09:54
День добрый. Помогите пожалуйста.
Нужно написать макрос который переносит слова (без пробелов, знаков препинания и т.д.) с нумерацией в новый документ. И если можно поподробнее.
Заранее спасибо!
Автор: murkovich
Дата сообщения: 19.12.2011 11:30
indapublic

Цитата:
в документе две надписи. Мне нужно скопировать их в тот же документ, пониже
Копирование самих надписей я добился - но не могу скопировать содержимое.

Не совсем понятно, что такое "надписи", и в каком смысле их самих копировать можно, но без содержимого? Разве надпись не то же самое, что ее содержимое?
Автор: nu4eHbko
Дата сообщения: 09.01.2012 12:34
помогите новичку

вопщем есть ворд файлик листов так на 100
подобного содержания

Цитата:
1030100053| 1.000|
1030100066| 1.000|
14.00|

| |
|. |
1030200045| 297.000|
311.00|

28 2011. .

который нужно привести к подобному виду

Цитата:
1020200003| 3.000|
1020200004| 6.000|
1020200009| 3.000|
1020200013| 9.000|

то есть убрать лишние строки содержащие символы или же цифры менее 8ми знаков в начале


Код: Sub m_1()
Dim oWrd As Range
For Each oWrd In Selection.Paragraphs(1).Range.Words
If Len(LTrim(oWrd)) < 8 Then
oWrd.Select
Selection.Delete
Next oWrd
End Sub
Автор: Gena1971
Дата сообщения: 09.01.2012 13:46
nu4eHbko
Selection.Paragraphs(1).Range.Words - все слова первого абзаца.
Вот типа такого надо

Код: For Each prgrph In ActiveDocument.Paragraphs
If prgrph.Range.Words.First.Characters.First.Text = " " Then
prgrph.Range.Words.First.Select
Selection.Delete
End If
If prgrph.Range.Words.First.Characters.Count < 8 Then
prgrph.Range.Select
Selection.Delete
End If
Next prgrph
Автор: nu4eHbko
Дата сообщения: 09.01.2012 14:01
пасиба огромное!!!!!!
я в поросячем визге

понял ошибку ...
Автор: Vadim39
Дата сообщения: 16.01.2012 03:22
Имеется документ, содержащий несколько тысяч букв. Нужно каждой из них случайным образом присвоить один из пяти стилей.
Подскажите, пожалуйста как написать VBA скрипт такого типа (совершенно не владею синтаксисом):

идти в начало документа

найти любую букву (^$)
Dim StyleNum
StyleNum = Int((5 * Rnd) + 1)
присвоить стиль ном. StyleNum найденной букве
найти следующую букву
и т.д. пока не достигнут конец документа

ЗарСпасБол!
Автор: Brainiacs
Дата сообщения: 14.02.2012 08:12
Доброго времени!

А помогите доработать скриптик (не мои):


Цитата:
Option Explicit

Dim strDocumentList
Dim strBadTemplate
Dim strDocument

Dim objFSO
Dim objWord


strDocumentList = "E:\Песочница\0116\DocumentList.txt"
strBadTemplate = "\\fileserver2\USERS$\sba\My Documents\Brand Manual\Brand Manual\templates Norit russia\Templates NV\Norit NV - brief - ENG, V060403.dot"


Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strDocumentList) Then
    Set objWord = WScript.CreateObject("Word.Application")
    
    With objFSO.OpenTextFile(strDocumentList)
        Do Until .AtEndOfStream
            strDocument = .ReadLine()
            
            If objFSO.FileExists(strDocument) Then
                WScript.Echo strDocument
                
                With objWord.Documents.Open(strDocument)
                    If .AttachedTemplate = strBadTemplate Then
                        WScript.Echo " Template found in document [" & strDocument & "]"
                        
                        .AttachedTemplate = "Normal.dotm"
                        .Save
                    End If
                    
                    .Close
                End With
            Else
                WScript.Echo "Document [" & strDocument & "] not found"
            End If
        Loop
        
        .Close
    End With
    
    objWord.Quit
    
    Set objWord = Nothing
Else
    WScript.Echo "Document list [" & strDocumentList & "] not found"
End If

Set objFSO = Nothing

WScript.Quit 0


Собственно вот Шаблон Word


Цитата:
strDocumentList = "E:\Песочница\0116\DocumentList.txt"


в этом файлике список путей к файлам ворд, созданный TotalCommander'ом:


Цитата:

.........
Z:\CDM\anketa_k.doc
Z:\CDM\pravil_karta_scheta.doc
..............



Цитата:
strBadTemplate


это шаблон который встроен в вордовские документы (таких доков много)

Задача: удалить путь к шаблон или заменить на шаблон по умолчанию (в 1283 документах)

Не работает, что-то скриптик! Файл он открывает, но шаблон не удаляет и не заменяет!
И ещё он когда echo отрабатывает, это ж надо будет на каждый файл "ок" нажимать, иначе он дальше не идет, можно как-то это тоже поправить?!
Автор: jackfrost
Дата сообщения: 22.02.2012 14:13
Подскажите возможно ли создание своих кодов-полей для MS Word, нечто похожее на Ctrl+F9 {=myFun \param1 \param2}
по аналогии с Excel (там можно в формуле вызывать любую public функцию модуля)

не ужели в ворде нет никакого способа? может какие-нибудь AddIns помогут?

Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: Кластеризация изображений


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.