Excel - формула "Сцепить"

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

siesta
Сообщения: 5
Зарегистрирован: 17 апр 2006, 16:10

В формуле =Сцепить() до кучи собирается текстовая информация, часть из которой надо сделать жирным шрифтом. У кого какие идеи?
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

идея только через макрос...
Изображение
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Угу. It is impossible :(

Может вместо жирного шрифта использовать заглавные буквы? Это проще.
siesta
Сообщения: 5
Зарегистрирован: 17 апр 2006, 16:10

Правило №1: "Начальник всегода прав!"
А жирненькие букофки - это каприз руководства.
Так где же примеры макросов от продвинутых монстров тупым юзерам? :wink:
sergvk
Сообщения: 129
Зарегистрирован: 21 июн 2005, 14:33
Откуда: Крым, Феодосия
Контактная информация:

Код: Выделить всё

ActiveCell.Characters(Start:=1, Length:=10).Font.FontStyle = "полужирный"
читаем так:
:D в активной ячейке, начиная с первого символа (Start:=1) сделать такой-то стиль шрифта десяти символам (Length:=10).
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Несомненно лучше делать ".Font.Bold=true" вместо ".FontStyle=", иначе при запуске в нерусифицированной windows работать не будет.

Я тут попробовал набросать альтернативную функцию СЦЕПИТЬ2, но оказалось что из пользовательской функции листа нельзя делать активных действий с ячейками. Тогда я попробовал все данные запихать в глобальные переменные и запланировать запуск другого макроса через секунду, но и тут засада - Application.OnTime игнорируется в процессе работы пользовательской функции листа :(

Т.е. выход один - самый тупой - вместо функции СЦЕПИТЬ написать обработчик события у нужного листа:

Код: Выделить всё

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
  Select Case Target.Address
    Case "$B$1", "$C$1"    'Тут делается D1=СЦЕПИТЬ(B1;C1) и C1 жирным
      [D1] = [B1] & [C1]
      [D1].Characters(Len([B1]) + 1, Len([C1])).Font.bold = True
    Case .... 'Аналогичных секций добавить по вкусу столько сколько надо
      ...........
  End Select
End Sub

Sokl
Сообщения: 451
Зарегистрирован: 12 сен 2005, 08:52
Откуда: ОМ

Exactly, ЁМоё :D !!!

Вот моя попытка:

Код: Выделить всё

Function СЦЕПИТЬЖ(Target As Range, Text1, Text2) As String
    'Target.FormulaR1C1 = Text1 & Text2
    '... ОПАЧКИ! А писать на листик низя!!!
    '... Читать пжлста!
    'MsgBox Target.Value
    СЦЕПИТЬЖ = Text1 & Text2
End Function
siesta
Сообщения: 5
Зарегистрирован: 17 апр 2006, 16:10

Макросы - команды просто нефунционально. Хочется макрос-функцию. Сама вот чего родила.

Function BoldFont(InString, StartSimb) As String
Dim i As Integer, StringLength As Integer
BoldFont = ""
StringLength = Len(InString)
For i = StartSimb To StringLength Step 1
BoldFont = BoldFont & ...... 'вот здесь надо что-то умное дописать, что делает букофки жиренькими
Next i
End Function

SOS!!! Help me!Help me!
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

siesta, дело в том, что функция сможет вернуть только строку, для изменения формата надо достучаться до соответствующих свойств объекта Characters
Изображение
siesta
Сообщения: 5
Зарегистрирован: 17 апр 2006, 16:10

Ну так помогите ж найти что это за объект!!!
Ответить