Как в тексте Word XP програмно заменить слово, например, "молоко" полем со списком где первым словом будет "молоко", а ниже нужные значения: "кефир", "сметана", "творог". И с помощью элемента управления "поле со списком" вставить в текст нужное в данном случае?
» Word VBA
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
Не знаю как 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
Спасибо, попробую, результат сообщу.
Приятно иметь дело!
Приятно иметь дело!
Как можно просмотреть доступные цветовые схемы с помощью VBA ?
Прошу помочь с кодом для такой задачи: есть 2 элемента управления содержимым типа "выбор даты". Первый называется "дата госпитализации", второй - "дата выписки". Далее есть третий элемент управления типа "текст" называемый "количество дней в стационаре". Нужно чтобы после заполнения первых двух полей автоматически считалось количество дней в третьем поле. С условием, что день госпитализации и день выписки в сумме дают один день ( то есть, дата госпитализации - 1 января 2011, дата выписки - 3 января 2011, дней в стационаре -2).
Пример файла: days.docx
Для похожей задачи, где по разнице двух дат вычислялся возраст, прекрасный код подсказал smirnvlad
Пытался изменить этот код, чтобы считалась разница в днях, но не осилил (не получилось, чтобы правильно считалась разница при переходе дат через месяц или год). Очень надеюсь, что smirnvlad откликнется и на этот раз
Пример файла: days.docx
Для похожей задачи, где по разнице двух дат вычислялся возраст, прекрасный код подсказал smirnvlad
Пытался изменить этот код, чтобы считалась разница в днях, но не осилил (не получилось, чтобы правильно считалась разница при переходе дат через месяц или год). Очень надеюсь, что smirnvlad откликнется и на этот раз
sashko1980
в том коде поменять строку
yd = DateDiff("yyyy", dB, dR)
на
yd = DateDiff("d", dB, dR)
а между комментариями - удалить
ворда под рукой нет, не проверял
в том коде поменять строку
yd = DateDiff("yyyy", dB, dR)
на
yd = DateDiff("d", dB, dR)
а между комментариями - удалить
ворда под рукой нет, не проверял
smirnvlad
Работает! Спасибо, вот все как просто. А я менял дни на годы в другой строке.
Работает! Спасибо, вот все как просто. А я менял дни на годы в другой строке.
Цитата:
Как можно просмотреть доступные цветовые схемы с помощью VBA ?
Не нашёл способа. Может, есть, но уж очень экзотический.
А как сделать так чтобы при изменении цветовой схемы цвет текста не менялся автоматичски?
rrromano
Чего ж экзотический?
Лежат Environ$("ProgramFiles") & "\Mircrosoft Office\Document Themes " & Mid$(Application.Version, 1, InStr(Application.Version, ".") - 1)
Чего ж экзотический?
Лежат Environ$("ProgramFiles") & "\Mircrosoft Office\Document Themes " & Mid$(Application.Version, 1, InStr(Application.Version, ".") - 1)
AndVGri
Чёрт, а ведь и правда...
У меня в C:\Program Files\Microsoft Office\Document Themes 12
Чёрт, а ведь и правда...
У меня в C:\Program Files\Microsoft Office\Document Themes 12
Хм, не там задал первый раз, повторюсь:
День добрый.
Так сложилось, что текст получен из 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
День добрый.
Так сложилось, что текст получен из 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
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
Где-то так можно забороть
Код:
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
Как перемещаясь по обычному Word-тексту с помощью команд:
Selection.MoveRight Unit:=wdCharacter, Count:=1 ' ВПРАВО на 1 позицию
…
Selection.MoveDown Unit:=wdLine, Count:=1 ' ВНИЗ на 1 строк
…
If Selection = ????? Then <На обработку конца текста>
Отыскать конец текст
Selection.MoveRight Unit:=wdCharacter, Count:=1 ' ВПРАВО на 1 позицию
…
Selection.MoveDown Unit:=wdLine, Count:=1 ' ВНИЗ на 1 строк
…
If Selection = ????? Then <На обработку конца текста>
Отыскать конец текст
indapublic
Сравнить
Код: Selection.End и (ActiveDocument.Characters.Count - 1)
Сравнить
Код: Selection.End и (ActiveDocument.Characters.Count - 1)
Ага, понятно, буду дальше пробовать
indapublic
А зачем такие сложности с перемещением? Не проще ли обрабатывать слова/символы/абзацы?
Конструкцией типа
Код: For Each ___ in ___
..................
..................
next
А зачем такие сложности с перемещением? Не проще ли обрабатывать слова/символы/абзацы?
Конструкцией типа
Код: For Each ___ in ___
..................
..................
next
Я не силен в VBA и не очень понял как обрабатывать слова-абзацы. Упор делаю именно на перемещение по тексту.
indapublic
вот я написал в теме ворда
Код: Sub XXX()
On Error Resume Next
For Each tarakan In Selection.Columns.First.Cells
tarakan.Range.Words.First.Bold = 1
Next
End Sub
вот я написал в теме ворда
Код: Sub XXX()
On Error Resume Next
For Each tarakan In Selection.Columns.First.Cells
tarakan.Range.Words.First.Bold = 1
Next
End Sub
Спасибо, буду использовать
еще вопросик можно:
в документе две надписи. Мне нужно скопировать их в тот же документ, пониже
Копирование самих надписей я добился - но не могу скопировать содержимое.
Не могу определить содержимое надписи, чтобы его скопировать в новую.
Подскажите пожалуйста.
вроде бы задание не сложное, но не получается.
в документе две надписи. Мне нужно скопировать их в тот же документ, пониже
Копирование самих надписей я добился - но не могу скопировать содержимое.
Не могу определить содержимое надписи, чтобы его скопировать в новую.
Подскажите пожалуйста.
вроде бы задание не сложное, но не получается.
Не могу понять - все так сложно или наоборот - так элементарно, что никто не считает возможным пару строк черкануть. Без всяких претензий - реально не могу понять ситуацию.
День добрый. Помогите пожалуйста.
Нужно написать макрос который переносит слова (без пробелов, знаков препинания и т.д.) с нумерацией в новый документ. И если можно поподробнее.
Заранее спасибо!
Нужно написать макрос который переносит слова (без пробелов, знаков препинания и т.д.) с нумерацией в новый документ. И если можно поподробнее.
Заранее спасибо!
indapublic
Цитата:
Не совсем понятно, что такое "надписи", и в каком смысле их самих копировать можно, но без содержимого? Разве надпись не то же самое, что ее содержимое?
Цитата:
в документе две надписи. Мне нужно скопировать их в тот же документ, пониже
Копирование самих надписей я добился - но не могу скопировать содержимое.
Не совсем понятно, что такое "надписи", и в каком смысле их самих копировать можно, но без содержимого? Разве надпись не то же самое, что ее содержимое?
помогите новичку
вопщем есть ворд файлик листов так на 100
подобного содержания
Цитата:
который нужно привести к подобному виду
Цитата:
то есть убрать лишние строки содержащие символы или же цифры менее 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
вопщем есть ворд файлик листов так на 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
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
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
пасиба огромное!!!!!!
я в поросячем визге
понял ошибку ...
я в поросячем визге
понял ошибку ...
Имеется документ, содержащий несколько тысяч букв. Нужно каждой из них случайным образом присвоить один из пяти стилей.
Подскажите, пожалуйста как написать VBA скрипт такого типа (совершенно не владею синтаксисом):
идти в начало документа
найти любую букву (^$)
Dim StyleNum
StyleNum = Int((5 * Rnd) + 1)
присвоить стиль ном. StyleNum найденной букве
найти следующую букву
и т.д. пока не достигнут конец документа
ЗарСпасБол!
Подскажите, пожалуйста как написать VBA скрипт такого типа (совершенно не владею синтаксисом):
идти в начало документа
найти любую букву (^$)
Dim StyleNum
StyleNum = Int((5 * Rnd) + 1)
присвоить стиль ном. StyleNum найденной букве
найти следующую букву
и т.д. пока не достигнут конец документа
ЗарСпасБол!
Доброго времени!
А помогите доработать скриптик (не мои):
Цитата:
Собственно вот Шаблон Word
Цитата:
в этом файлике список путей к файлам ворд, созданный TotalCommander'ом:
Цитата:
Цитата:
это шаблон который встроен в вордовские документы (таких доков много)
Задача: удалить путь к шаблон или заменить на шаблон по умолчанию (в 1283 документах)
Не работает, что-то скриптик! Файл он открывает, но шаблон не удаляет и не заменяет!
И ещё он когда echo отрабатывает, это ж надо будет на каждый файл "ок" нажимать, иначе он дальше не идет, можно как-то это тоже поправить?!
А помогите доработать скриптик (не мои):
Цитата:
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 отрабатывает, это ж надо будет на каждый файл "ок" нажимать, иначе он дальше не идет, можно как-то это тоже поправить?!
Подскажите возможно ли создание своих кодов-полей для MS Word, нечто похожее на Ctrl+F9 {=myFun \param1 \param2}
по аналогии с Excel (там можно в формуле вызывать любую public функцию модуля)
не ужели в ворде нет никакого способа? может какие-нибудь AddIns помогут?
по аналогии с Excel (там можно в формуле вызывать любую public функцию модуля)
не ужели в ворде нет никакого способа? может какие-нибудь AddIns помогут?
Страницы: 1234567891011121314151617181920212223242526
Предыдущая тема: Кластеризация изображений
Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.