Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 17:45   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Оформления текста

Задача: В ячейке записана формула, по результату работы которой формируется текстовое сообщение. Нужно оформить это текстовое сообщение. Например часть сообщения выделить жирным шрифтом, вставить внутрь спецсимволы из шрифта "Symbol" (изменить шрифт у одного или нескольких символов).
Так же интересно делать подобное средствами VBA.
Пример приведен в файле.
Вложения
Тип файла: rar Книга1.rar (1.7 Кб, 14 просмотров)
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 26.03.2009, 18:06   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Для изменения форматирования отдельных символов текста ячейки можно использовать примерно такой код:
(приведённый код выделяет жирным шрифтом все цифры в ячейке)

Код:
Sub BoldingDigits(ByRef cell As Range)
    On Error Resume Next
    For i = 1 To cell.Characters.Count
        letter = cell.Characters(Start:=i, Length:=1).Text
        cell.Characters(Start:=i, Length:=1).Font.Bold = IsNumeric(letter)
    Next
End Sub

Sub ПримерИспользования()
    BoldingDigits [b1]
    BoldingDigits ActiveCell
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 26.03.2009, 18:23   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Для изменения форматирования отдельных символов текста ячейки можно использовать примерно такой код:
(приведённый код выделяет жирным шрифтом все цифры в ячейке)

Код:
Sub BoldingDigits(ByRef cell As Range)
    On Error Resume Next
    For i = 1 To cell.Characters.Count
        letter = cell.Characters(Start:=i, Length:=1).Text
        cell.Characters(Start:=i, Length:=1).Font.Bold = IsNumeric(letter)
    Next
End Sub

Sub ПримерИспользования()
    BoldingDigits [b1]
    BoldingDigits ActiveCell
End Sub
Уже Очень хорошо!
Для этого нужно позицию символа в строке, что иногда проблематично...
Можно выделить жирным весть текст ограниченные знаком &.
Например :range("A1").value="Текст 1" & "Текст который должен быть жирным" & "Текст 2"
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 26.03.2009, 18:32   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

По поводу range("A1").value="Текст 1" & "Текст который должен быть жирным" & "Текст 2"

Если макрос формирует это значение, то можно (на стадии формирования) - макрос запоминает позицию, с которой должен начинаться полужирный текст, и длину этого текста
После формирования строки запускается что-то вроде этого:
Код:
range("A1").Characters(Start:=12, Length:=16).Font.Bold = true
Можно также анализировать формулу в ячейке (при помощи макроса)
Допустим, нам известно, что формула в ячейке имеет вид
Код:
=a1 & b1 & c1

Мы макросом анализируем формулу, находим адрес ячейки, текст которой должен стать полужирным (в нашем случае мы находим адрес "b1"), считываем этот текст из ячейки b1, находим этот текст в обрабатываемой ячейке (узнавая стартовую позицию этого текста, а длина нам уже известна), и запускаем вышеприведённый код.

Возможно, есть способы попроще.
EducatedFool вне форума Ответить с цитированием
Старый 26.03.2009, 18:41   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
По поводу range("A1").value="Текст 1" & "Текст который должен быть жирным" & "Текст 2"

Если макрос формирует это значение, то можно (на стадии формирования) - макрос запоминает позицию, с которой должен начинаться полужирный текст, и длину этого текста
После формирования строки запускается что-то вроде этого:
Код:
range("A1").Characters(Start:=12, Length:=16).Font.Bold = true
Возможно, есть способы попроще.
А можно так???
Код:
string1="Текст 1"
string2="Текст который должен быть жирным"
string3="Текст 3"
strting2.Characters(Start:=1, Length:=по всей длине).Font.Bold = true
range("A1").value=string1&string2&string3
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 26.03.2009, 18:49   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
А можно так???
Нет, нельзя.

Зато вот так можно:
Код:
Sub test()
    string1 = "Текст 1"
    string2 = " Текст который должен быть жирным "
    string3 = "Текст 3"

    Range("A1").Value = string1 & string2 & string3
    Range("A1").Characters(Len(string1) + 1, Len(string2)).Font.Bold = True
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 26.03.2009, 18:54   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Нет, нельзя.

Зато вот так можно:
Код:
Sub test()
    string1 = "Текст 1"
    string2 = " Текст который должен быть жирным "
    string3 = "Текст 3"

    Range("A1").Value = string1 & string2 & string3
    Range("A1").Characters(Len(string1) + 1, Len(string2)).Font.Bold = True
End Sub
ИМХО похоже это лучшее что можно придумать и вполне приемлемо.
Как я понимаю таким же способом можно изменить и тип шрифта текста...
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Listbox с возможностью оформления lionman Компоненты Delphi 0 17.10.2008 21:47
Стили оформления кода Altera Свободное общение 2 30.08.2008 17:23
Получить стиль оформления Windows AlexandrSid Общие вопросы Delphi 8 02.07.2008 15:52
Проблема оформления SunKnight Общие вопросы Delphi 3 25.02.2008 01:11