Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/47: Рейтинг темы: голосов - 47, средняя оценка - 4.62
32 / 32 / 3
Регистрация: 22.10.2012
Сообщений: 499

Форматирование текста выводимый в Word через VBA

28.12.2012, 13:09. Показов 10208. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как в VBA отформатировать текст.
Например что то типа такого.
Visual Basic
1
RT 1, "[b]Покупатель:[\b] " & Фамилия_Клиента & " " & Имя_Клиента & " " & Отчество_Клиента & "с другой стороны, именуемые далее вместе -  'стороны', подписали Данный Акт о нижеследующем:"
Эта строка заполняет в ворде опредленную ячейку, как сделать так что бы слово Покупатель: было выделено жирным, а остальные слова обычный текст? Разбить на 2 ячейки не предлогайте, в данном случае текста больше чем влезает в ячейку, а ячейка должна растягиваться.
Нашел про Font.Bold = true, но примеров использования в том виде, который мне нужен пока не нашел.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.12.2012, 13:09
Ответы с готовыми решениями:

Форматирование части текста ячейки через Excel.Application
Здравствуйте коллеги. Заполняю Excel из Access с помощью похожего кода: В ячейку A:1 вставляется необходимый мне текст, делается жирным...

Разница в скорости vba word и vba access
Вопрос: из акса идет выгрузка данных в файл ворд, далее эти данные опять же из акса форматно обрабатываются (данные заранее были тегированы...

Форматирование текста в VBA
доброго времени суток! есть форма с текстбоксом куда вводится текст, можно ли применить форматирование текста: установить размер и тип...

16
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
28.12.2012, 14:08
Цитата Сообщение от Don1172005 Посмотреть сообщение
как сделать так что бы слово Покупатель: было выделено жирным, а остальные слова обычный текст?
в одном поле - никак. в Worde не в курсе
0
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
28.12.2012, 14:33
Цитата Сообщение от Don1172005 Посмотреть сообщение
Как в VBA отформатировать текст.
Например что то типа такого.
Visual Basic
1
RT 1, "[b]Покупатель:[\b] " & Фамилия_Клиента & " " & Имя_Клиента & " " & Отчество_Клиента & "с другой стороны, именуемые далее вместе -  'стороны', подписали Данный Акт о нижеследующем:"
Эта строка заполняет в ворде опредленную ячейку, как сделать так что бы слово Покупатель: было выделено жирным, а остальные слова обычный текст?
...
Нашел про Font.Bold = true, но примеров использования в том виде, который мне нужен пока не нашел.
А нужное слово в "ячейке" первое (второе, третье...) всегда?
Заполните документ, потом в Ворде макрорекордером войдите в ячейку, перейдите к первому слову, выделите его и выберите шрифт. Затем войдите в Макросы, найдите, как программа записала ваши действия, и вставьте эти операторы в ваш код
0
2904 / 1937 / 211
Регистрация: 05.06.2011
Сообщений: 5,725
28.12.2012, 15:21
Только творчески переписывать лучше. Макрорекордер всё делает через Selection, это приводит в метаниям по интерфейсу. Лучше переписать через Range
0
Модератор
Эксперт MS Access
 Аватар для shanemac51
12231 / 5078 / 814
Регистрация: 07.08.2010
Сообщений: 14,941
Записей в блоге: 4
28.12.2012, 15:23
НЕ ПОНЯЛА ВАШЕЙ ЗАДАЧИ

--ВЫ ФОРМИРУЕТЕ ВОРД-ДОКУМЕНТ ИЗ АКСЕССА (согласно закладок)

ИЛИ НЕЧТО ДРУГОЕ
0
32 / 32 / 3
Регистрация: 22.10.2012
Сообщений: 499
28.12.2012, 23:29  [ТС]
Андрэич, iifat, Спасибо за подсказки попробую таким образом узнать что мне нужно для этой задачи.

shanemac51, Мне нужно что бы текст был максимально ровным. Сейчас уже не могу выслать скрины для пояснений, а на словах будет очень запуно поэтому вышлю все завтра. Что бы показать что я хочу и что у меня не получается.
0
 Аватар для Андрэич
2842 / 774 / 41
Регистрация: 20.05.2012
Сообщений: 2,055
28.12.2012, 23:34
Да, собственно, shanemac имела ввиду, как вы связываететь с Вордом: стандартными средствами из меню или программно
0
 Аватар для capup
5 / 5 / 0
Регистрация: 29.06.2011
Сообщений: 78
01.01.2013, 05:23
Решаю подобную задачу методом слияния. Т.е. подготавливаем документ WORD и подгружаем таблицу в качестве источника. На форме делаем кнопочку запуска этого документа. Нажимаем две кнопки и получаем готовый экземпляр, уже отформатированный.
1
2904 / 1937 / 211
Регистрация: 05.06.2011
Сообщений: 5,725
01.01.2013, 08:09
Цитата Сообщение от capup Посмотреть сообщение
Решаю подобную задачу методом слияния
Кстати, тоже хороший способ. Приятно, что поле задаёшь один раз, а уже в шаблоне вставляешь скоко хочешь.
Правда, -- я правильно понимаю? -- надо нажать кнопку на форме, а потом ещё в Ворде, чтоб увидеть документ.
Ну и изыски типа стартового сообщения потребуют ухищрений -- поле форматируется как единое целое, одним форматом. Правда, можно разбить его на несколько и вставлять их везде одно за другим, только с разным форматированием. Ну и ещё: значение поля -- строка, а на место закладки можно вставлять что угодно. Правда, и документ слияния не так уж прост -- условными вставками можно такого наделать...
0
 Аватар для capup
5 / 5 / 0
Регистрация: 29.06.2011
Сообщений: 78
01.01.2013, 12:24
Цитата Сообщение от iifat Посмотреть сообщение
Кстати, тоже хороший способ. Приятно, что поле задаёшь один раз, а уже в шаблоне вставляешь скоко хочешь. Правда, -- я правильно понимаю? -- надо нажать кнопку на форме,
Смотря какая задача. У меня, например есть отдельная обновляемая таблица с одной записью и множеством столбцов.
На форме кнопка, типа "Принт", она вызывает уже сформированный шаблон, который считывает значения таблицы с единственной записью.
Цитата Сообщение от iifat Посмотреть сообщение
а потом ещё в Ворде, чтоб увидеть документ.
Потом Ворд спрашивает "Выполнить SQL запрос?" - нажать ОК. В результате получим документ слияния ГОТОВЫЙ.
Единственно, документ слияния это что-то вроде отчета в MS ACCESS. Он содержит виртуальные значения (т.е.) значения полей связанной таблицы. Для получения открепленного экземпляра нужно создать экземпляр, который уже не будет ссылаться на таблицу (нажать еще одну кнопку).
Цитата Сообщение от iifat Посмотреть сообщение
Ну и изыски типа стартового сообщения потребуют ухищрений -- поле форматируется как единое целое, одним форматом. Правда, можно разбить его на несколько и вставлять их везде одно за другим, только с разным форматированием.
Как правило, если возникает вопрос форматирования, то потому, что мы хотим его применить в большом разнообразии и количестве. Более того, если нам нужно создать небольшую табличку в WORD и вставить туда текст, то вообще не знаю как это с помощью программирования решается... Поэтому лучше один раз напрячься, создать поля и вставить (у меня в письме WORD 30 полей).
Цитата Сообщение от iifat Посмотреть сообщение
Ну и ещё: значение поля -- строка, а на место закладки можно вставлять что угодно.
Что угодно... это как? До сих пор вставлялось, что положил в таблицу...
Цитата Сообщение от iifat Посмотреть сообщение
Правда, и документ слияния не так уж прост -- условными вставками можно такого наделать...
Зачем условные вставки? Вся логика отрабатывается в ACCESS. Вставляем готовенькое!
0
2904 / 1937 / 211
Регистрация: 05.06.2011
Сообщений: 5,725
01.01.2013, 16:10
Цитата Сообщение от capup Посмотреть сообщение
Потом Ворд спрашивает "Выполнить SQL запрос?" - нажать ОК. В результате получим документ слияния ГОТОВЫЙ.
Это ещё не совсем готовый, это первая запись запроса, вставленная в подготовленный шаблон. Разумеется, если всё получилось уместить в одну запись -- фактически, готовый.
Цитата Сообщение от capup Посмотреть сообщение
Более того, если нам нужно создать небольшую табличку в WORD и вставить туда текст, то вообще не знаю как это с помощью программирования решается...
В принципе, несложно: включаем в Ворде запись, клепаем примерчик, заканчиваем запись и смотрим на получившийся макрос. Меняем Selection на Range и вставляем в программу на VBA. Естественно, в жизни приходится немало полазить по хелпам (а они у новых Вордов, считаю, премерзкие), но извратиться можно. Конечно, это уже экзотика типа отчёта на основании формы с двумя подчинёнными ленточными.

Цитата Сообщение от capup Посмотреть сообщение
Зачем условные вставки?
Пытался себе представить, как таким способом сделать что-нить типа 1Совского документа, с шапкой и таблицей. Наверное, сделать табличку/запрос, чтоб данные шапки были в каждой записи, а средствами Ворда сделать, чтоб для первой записи выводилась шапка и строчка таблицы, для остальных -- только строчка.
0
 Аватар для capup
5 / 5 / 0
Регистрация: 29.06.2011
Сообщений: 78
03.01.2013, 23:28
Цитата Сообщение от iifat Посмотреть сообщение
Это ещё не совсем готовый, это первая запись запроса, вставленная в подготовленный шаблон. Разумеется, если всё получилось уместить в одну запись -- фактически, готовый.
Как я писал, это готовый документ именно СЛИЯНИЯ, причем загружена вся таблица, а не только первая запись таблицы. Их можно пролистать, нажав специальную кнопку. Обратите внимание, что перенос и копирование такого файла нежелателен, так как он ссылается на таблицу. Необходимо выполнить "Изменить отдельные документы" для получения экземплярчика обычного с текстом, без полей слияния.
Я по началу не ориентировался то ли это документ слияния или готовый, поэтому советую включить "Выделить поля слияния" для подсветки. Кстати у меня так и не получилось сделать макрос (не работает!), который сам жал бы кнопки OK и "Изменить отдельные документы".

Цитата Сообщение от iifat Посмотреть сообщение
В принципе, несложно: включаем в Ворде запись, клепаем примерчик, заканчиваем запись и смотрим на получившийся макрос. Меняем Selection на Range и вставляем в программу на VBA. Естественно, в жизни приходится немало полазить по хелпам (а они у новых Вордов, считаю, премерзкие), но извратиться можно. Конечно, это уже экзотика типа отчёта на основании формы с двумя подчинёнными ленточными.
Ну, это на любителя ... Я, например не знаю как передавать в этом случае VBA-код для рисования таблички. И по-моему одно исключает другое Какой смысл совмещать ... или все рисуем с помощью VBA, или обламываемся и делаем слияние... Как Вы считаете?

Цитата Сообщение от iifat Посмотреть сообщение
Пытался себе представить, как таким способом сделать что-нить типа 1Совского документа, с шапкой и таблицей. Наверное, сделать табличку/запрос, чтоб данные шапки были в каждой записи, а средствами Ворда сделать, чтоб для первой записи выводилась шапка и строчка таблицы, для остальных -- только строчка.
Ну, да создать табличку, где одно поле "Шапка" будет с одинаковыми значениями и привет!
0
2904 / 1937 / 211
Регистрация: 05.06.2011
Сообщений: 5,725
04.01.2013, 04:22
Цитата Сообщение от capup Посмотреть сообщение
это готовый документ именно СЛИЯНИЯ
В общем, думаю, мы друг друга поняли
Цитата Сообщение от capup Посмотреть сообщение
Какой смысл совмещать ... или все рисуем с помощью VBA, или обламываемся и делаем слияние
Определённо. Я и пытаюсь сравнить два подхода.
0
32 / 32 / 3
Регистрация: 22.10.2012
Сообщений: 499
18.01.2013, 12:30  [ТС]
Простите что очень долго не отвечал Так получилось просто. Если я вас правильно понял и гугл меня правильно направил, то получилось следующее.
Visual Basic
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
    Dim app As Word.Application
    Dim strPathDot As String, strPathWord As String
    Dim Фамилия_Клиента As String
    Dim Имя_Клиента As String
    Dim Отчество_Клиента As String
    
    'Имя клиента
    Фамилия_Клиента = Forms!фРедактирование_Заказа!Фамилия
    Имя_Клиента = Forms!фРедактирование_Заказа!Имя
    Отчество_Клиента = Nz(Forms!фРедактирование_Заказа!Отчество, "")
     
    strPathDot = "templates\БезНал\Акт-Приема-Передачи.dot"
    strPathWord = "Готовые Документы\БезНал\Акт Приема Передачи № " & Forms!фРедактирование_Заказа!Код_заказа & " " & Forms!фРедактирование_Заказа!Фамилия & ".doc"
     
    'Если есть документ с таким же названием и местом расоложения, выдается сообщение о замене
    If Dir(strPathWord) <> "" Then
    DlgUser = MsgBox("Документ с таким именем ранее уже был создан. Заменить его?", vbYesNo, "admin")
     
    'Если нет, открывается старый документ
    If DlgUser = vbNo Then
    Set app = CreateObject("Word.Application")
    With app
    .Visible = True
    .Documents.Open strPathWord
    End With
    Set app = Nothing
    Else
    GoTo nn
    End If
    Else
     
    'Если такого документа нет или, если человек выбрал "да", то создается новый документ взамен старого на основе шаблона
nn:
    Set app = New Word.Application
    app.Visible = True
    app.Documents.Add strPathDot
    With app.ActiveDocument
     
    'Вставка данных
    .Bookmarks("Код_Заказа").Range.Text = Nz(Forms!фРедактирование_Заказа!Код_заказа, "")
    .Bookmarks("Код_Заказа1").Range.Text = Nz(Forms!фРедактирование_Заказа!Код_заказа, "")
    .Bookmarks("Код_Заказа2").Range.Text = Nz(Forms!фРедактирование_Заказа!Код_заказа, "")
    .Bookmarks("Код_Заказа3").Range.Text = Nz(Forms!фРедактирование_Заказа!Код_заказа, "")
    .Bookmarks("Код_Заказа4").Range.Text = Nz(Forms!фРедактирование_Заказа!Код_заказа, "")
    .Bookmarks("Дата_Размещения").Range.Text = Nz(Format(Forms!фРедактирование_Заказа!Дата_Размещения, Chr(171) & "dd" & Chr(187) & " mmmm yyyy года"), "")
    .Bookmarks("Дата_Размещения1").Range.Text = Nz(Format(Forms!фРедактирование_Заказа!Дата_Размещения, Chr(171) & "dd" & Chr(187) & " mmmm yyyy года"), "")
    .Bookmarks("Дата_Размещения2").Range.Text = Nz(Format(Forms!фРедактирование_Заказа!Дата_Размещения, Chr(171) & "dd" & Chr(187) & " mmmm yyyy года"), "")
    .Bookmarks("Дата_Размещения3").Range.Text = Nz(Format(Forms!фРедактирование_Заказа!Дата_Размещения, Chr(171) & "dd" & Chr(187) & " mmmm yyyy года"), "")
    .Bookmarks("Дата_Составления").Range.Text = Nz(Format(Date, Chr(171) & "dd" & Chr(187) & " mmmm yyyy года"), "")
    .Bookmarks("Фамилия").Range.Text = Nz(Forms!фРедактирование_Заказа!Фамилия, "")
    .Bookmarks("Имя").Range.Text = Nz(Forms!фРедактирование_Заказа!Имя, "")
    .Bookmarks("Отчество").Range.Text = Nz(Forms!фРедактирование_Заказа!Отчество, "")
    .Bookmarks("Клиент").Range.Text = Nz(Фамилия_Клиента & " " & Left([Имя_Клиента], 1) & "." & Left([Отчество_Клиента], 1) & ".", "")
    'и т.д. по всем закладкам
     
    .SaveAs strPathWord
    .Protect wdAllowOnlyFormFields, True, ""
    End With
    Set app = Nothing
    End If
    funOutputWord = True
Exit_:
П.С.: Динамические пути у меня сейчас в разработке
0
2904 / 1937 / 211
Регистрация: 05.06.2011
Сообщений: 5,725
18.01.2013, 16:04
Ну, примерно так. как вариант.
Несколько замечаний по мелочи.
Цитата Сообщение от Don1172005 Посмотреть сообщение
Visual Basic
1
GoTo nn
goto -- моветон-с, а goto из then в else -- паче того. Ей-богу, стоит как-то по-другому.
Цитата Сообщение от Don1172005 Посмотреть сообщение
Visual Basic
1
app.Visible = True
Вот это довольно сильно, имхо, замедляет процесс -- отображение действий. На время заполнения документа текстом лучше в False. Оборотная сторона -- случись чо в процессе, Visible так и останется False, что чревато. Впрочем, и исправляется так же.
Цитата Сообщение от Don1172005 Посмотреть сообщение
Visual Basic
1
With app.ActiveDocument
Имхо, не стоит завязываться на ActiveDocument, особенно если Visible = True. Коварный юзер может, например, переключить невовремя окошко...
Цитата Сообщение от Don1172005 Посмотреть сообщение
Visual Basic
1
2
.SaveAs strPathWord
.Protect wdAllowOnlyFormFields, True, ""
Лучше, наверное, местами поменять? И при чём тут FormFields? Напоминаю -- полей у тебя нет!
Ну и, наверное, лучше функу написать. У меня была, ей передавался массив имён и значений. причём сравнивалось не на полное совпадение букмарки с именем, а на начало -- так что, например, ей передавалось "Дата_Размещения", дата, и эту рату она проставляла в Дата_Размещения, Дата_Размещения1 и т.п. В общем, сам по ходу дела ссобразишь.
0
114 / 4 / 0
Регистрация: 07.09.2014
Сообщений: 329
05.10.2014, 15:20
заполняю из Access шаблон Word, используя закладки. Нужно чтобы то, что вставляется в место закладки (денежная сумма) выглядело следующим образом: 22 222,22 , а не 22222,22.
Вот с таким кодом не срабатывает - не выводит знаки после запятой, и впереди добавляются пробелы. Подскажите что не так?
Visual Basic
1
.Bookmarks.Item("сумма_долга1").Range.Text = Nz(Format(Forms!Данные!Сумма_долга, "# ### ### ##0,00"))
Добавлено через 7 минут
разобрался: нужна точка, а не запятая в коде форматирования

Добавлено через 6 минут
а пробел в начале все равно ставиться если в числе больше цифр, чем количество # (
0
Эксперт MS Access
26827 / 14507 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
05.10.2014, 15:47
Вместо шаблона "# ### ### ##0.00" примените формат "Standard"
Visual Basic
1
.Bookmarks.Item("сумма_долга1").Range.Text = Format(Nz(Forms!Данные!Сумма_долга), "Standard")
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.10.2014, 15:47
Помогаю со студенческими работами здесь

Word и форматирование текста
Добрый вечер знатоки! Подскажите плз, как осуществить следующее: По нажатию на кнопку на форме, открывается шаблон *.doc, в который...

Форматирование текста в Word
Мне нужно в одну строку вывести два слова. И они должны быть разных размеров. Но у меня выводится в первом случае только второе слово,...

Форматирование текста в Word
Есть некий текст, в котором необходимо поменять ряд значений. Я это вижу следующим образом: Пользователь выделяет текст, относительно...

Разное форматирование абзацев текста MS Word
Помогите выполнить нудную работу!!! Необходимо отформатировать текст! Один абзац по одному формату, другой по другому и т.д.

Форматирование большого текста с разделами в Word 10
Вопрос есть! В Word 2003 можно было при редактировании текста изменять расстояния между символами, межстрочное расстояние и т.п. При...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru