Excel VBA Макросы: Как изменить форматирование вставляемого значения ячейки в надпись?

Автор gtz, 22 января 2018, 14:59

gtz

Добрый день!

Мне нужно скопировать данные из ячейки в надпись. При этом я хочу использовать Value. Я сделал такой макрос, но он копирует только данные без оформления. Как скопировать данные из ячейки с помощью Value и чтобы сохранилось оформление?

Макрос:
Sub Макрос1()
    ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 100, 100, 300, 200).Select
    Selection.ShapeRange(1).TextFrame2.TextRange.Characters.Text = _
    "Название" & " " & Worksheets("List1").Range("b1").Value & Chr(13) &  _
    "Вид"
End Sub

Кроме того, интересует, как изменить шрифт копируемого текста. Например, в ячейке шрифт 11 пунктов, нужно чтобы вставилось в надпись в размере 12 пт.

В надписи уже может быть текст со своим оформлением. Нужно сохранить этот текст и оформление.

Кроме того, интересует, можно ли такое сделать при копирование данных не в надпись, а в другую ячейку.

Администратор

В надпись можно вставить текст с исходным оформлением, но для этого нужно использовать копирование / вставку.
Как использовать в данном случае Value, я не знаю.

Как менять размер шрифта у вставляемого текста, не знаю. Но можно менять размер шрифта после того, как данные окажутся в надписи. Кроме того, можно для этой задачи использовать временную надпись. Специально создаёте временную надпись, вставляете в неё данные из ячейки, делаете нужное оформление, а затем уже копируете в нужную надпись. Затем удаляете временную надпись.

Прикладываю файл, для которого сделан макрос по копированию. Макрос по изменению размера шрифта я не делал.

Макрос
Sub макрос()

    Dim TextRange As TextRange2
   
    '1. Копируем нужную ячейку, чтобы скопировать не только данные, но и оформление шрифта.
    Range("A1").Copy
    '2. Присваиваем объекту "TextRange" имя "TextRange".
        ' Для удобства написания и чтения кода.
    Set TextRange = ActiveSheet.Shapes(1).TextFrame2.TextRange
    '3. Вставляем в конец надписи пробел, чтобы потом вместо него вставить
        ' скопированные данные. Как вставить в конец надписи без пробела, я не знаю.
    TextRange.InsertAfter " "
    '4. Вставка в только что вставленный пробел скопированного текста.
    TextRange.Characters(TextRange.Characters.Count, 1).PasteSpecial msoClipboardFormatHTML
    '5. Удаление с конца пробела. Не знаю, почему он вставляется.
    TextRange.Characters(TextRange.Characters.Count, 1).Delete
    '6. Выход из режима копирования.
    Application.CutCopyMode = False
   
End Sub
[свернуть]

[вложение удалено администратором]

Администратор

Как вставить в ячейку текст с оформлением, если в ячейке уже есть текст и у него есть оформление, не знаю.
Можно изменять оформление после вставки данных в ячейку.

gtz

Спасибо!
Сегодня протестирую, думал что можно как-то покороче сделать.