Сцепка ячеек с сохранением формата

Программирование на Visual Basic for Applications
YRU
Начинающий
Начинающий
 
Сообщения: 7
Зарегистрирован: 30.08.2005 (Вт) 11:36

Сцепка ячеек с сохранением формата

Сообщение YRU » 05.09.2005 (Пн) 9:04

Нашел макрос, описанный как сцепляющий ячейки с сохранением формата записанного в них текста, но он у меня не работает. Помогите, пожалуйста, отладить его. Заранее благодарен за помощь.

For Each iСell In Diapazon
If IsEmpty(iСell) <> True Then
If CoupleFormat = "" Then ' как второй вариант IsEmpty
CoupleFormat = iСell.Text
Else
CoupleFormat = CoupleFormat & " " & iСell.Text
End If
End If
Next

End Function

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 06.09.2005 (Вт) 0:33

Забыл добавить в начало кода следующую строку:
Function CoupleFormat(Diapazon)
Однако эта функция не применяет форматирование, а только скрепляет текст и добавляет пробел...
Life is what happens to us when we are planning to do something else...

Терминатор
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 164
Зарегистрирован: 06.01.2005 (Чт) 12:57
Откуда: Москва

Сообщение Терминатор » 07.09.2005 (Ср) 14:36

Метод Copy не подойдёт?
Он скопирует Ваши форматы, но необходимо продумать алгоритм переноса самих данных и их объединение. Но это уже больше логическая задача.
Hasta la vista, baby!

sergeyvg
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 16.08.2005 (Вт) 9:27

Сообщение sergeyvg » 08.09.2005 (Чт) 10:06

С функцией не знаю как, а процедура такая.
Оказывается ячейки с нетекстом не имеют Characters:), отсюда некоторое усложнение. Для полного счастья нужно перечислять все свойства Font, я привел только три.

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

Sub CoupleFormatP(Diapazon, Ziel)
Dim I As Long, J As Long, K As Long
For Each iCell In Diapazon
  I = Ziel.Characters.Count
  Ziel.Characters(I + 1).Insert (iCell.Text)
  On Error Resume Next
  K = iCell.Characters.Count
  If Err.Number <> 0 Then
    On Error GoTo 0
    With Ziel.Characters(I + 1, Len(iCell.Text)).Font
      .Name = iCell.Font.Name
      .FontStyle = iCell.Font.FontStyle
      .Size = iCell.Font.Size
    End With
  Else
    On Error GoTo 0
    For J = 1 To K
      With Ziel.Characters(I + J, 1).Font
        .Name = iCell.Characters(J, 1).Font.Name
        .FontStyle = iCell.Characters(J, 1).Font.FontStyle
        .Size = iCell.Characters(J, 1).Font.Size
      End With
    Next J
  End If
Next
End Sub

Sub test115()
  Call CoupleFormatP(Range("B3,B4, D5"), Range("D1"))
End Sub

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 08.09.2005 (Чт) 10:14

sergeyvg писал(а):С функцией не знаю как, а процедура такая.

А с функцией никак. Их (функций) основное назначение - возвращать значение через свое имя. Можно, конечно извратиться и заставить ее применять форматирование к каким-либо ячейкам, но не к той, которая вызывает функцию, т.к. невозможно узнать ее адрес.
Life is what happens to us when we are planning to do something else...

sergeyvg
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 16.08.2005 (Вт) 9:27

Сообщение sergeyvg » 08.09.2005 (Чт) 10:21

Отчего-же, через Application.Caller можно получить адрес, а вот изменить другую ячейку внутри функции, вызываемой из ячейки - это вот точно нельзя.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 08.09.2005 (Чт) 10:41

sergeyvg писал(а):Отчего-же, через Application.Caller можно получить адрес, а вот изменить другую ячейку внутри функции, вызываемой из ячейки - это вот точно нельзя.

И ведь точно! Что-то меня глюконуло...
:shock:


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 95

    TopList