it-swarm.com.ru

Копирование значения ячейки с сохранением форматирования из одной ячейки в другую в Excel с использованием VBA

В Excel я пытаюсь скопировать текст из одной ячейки в другую ячейку на другом листе. Исходная ячейка содержит форматированный текст (полужирный, подчеркнутый, разные цвета). Но когда я копирую текст с помощью VBA в другую ячейку, форматирование теряется.

Я знаю, это потому, что Excel копирует только текстовое значение. Есть ли способ, которым мы можем прочитать HTML текст (а не простой текст) из ячейки?

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

Range("F10").Select
Selection.Copy
Range("I10").Select
ActiveSheet.Paste

Но я хочу сделать это без копирования и вставки, поскольку мой пункт назначения - это объединенная ячейка, размер которой не совпадает с размером исходной ячейки. Есть ли опция, доступная в Excel VBA для этого?

Правка: Я смог решить эту проблему с помощью следующего кода.

Range("I11").Value = Range("I10").Value
For i = 1 To Range("I10").Characters.Count
    Range("I11").Characters(i, 1).Font.Bold = Range("I10").Characters(i, 1).Font.Bold
    Range("I11").Characters(i, 1).Font.Color = Range("I10").Characters(i, 1).Font.Color
    Range("I11").Characters(i, 1).Font.Italic = Range("I10").Characters(i, 1).Font.Italic
    Range("I11").Characters(i, 1).Font.Underline = Range("I10").Characters(i, 1).Font.Underline
    Range("I11").Characters(i, 1).Font.FontStyle = Range("I10").Characters(i, 1).Font.FontStyle
Next i
8
BlackCursor

Чтобы скопировать форматирование:

Range("F10").Select
Selection.Copy
Range("I10:J10").Select ' note that we select the whole merged cell
Selection.PasteSpecial Paste:=xlPasteFormats

копирование форматирования разрушит объединенные ячейки, так что вы можете использовать это, чтобы собрать ячейку вместе

Range("I10:J10").Select
Selection.Merge

Чтобы скопировать значение ячейки, не копируя ничего другого (и не используя копирование/вставку), вы можете обратиться к ячейкам напрямую

Range("I10").Value = Range("F10").Value

другие свойства (шрифт, цвет, и т. д. ) также можно скопировать, напрямую обращаясь к свойствам объекта диапазона.

5
SeanC

Используете Excel 2010? Пытаться

Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
7
Eric

Я предпочитаю избегать выбора

     With sheets("sheetname").range("I10") 
          .PasteSpecial Paste:=xlPasteValues, _
                  Operation:=xlNone, _
                  SkipBlanks:=False, _
                  Transpose:=False
          .PasteSpecial Paste:=xlPasteFormats, _
                  Operation:=xlNone, _
                  SkipBlanks:=False, _
                  Transpose:=False
          .font.color = sheets("sheetname").range("F10").font.color
      End With
      sheets("sheetname").range("I10:J10").merge
3
scott
Sub CopyValueWithFormatting()
    Sheet1.Range("A1").Copy
    With Sheet2.Range("B1")
        .PasteSpecial xlPasteFormats
        .PasteSpecial xlPasteValues
    End With
End Sub
1
Ankush agarwal

Копирование полужирного текста с одного листа на другой лист в Excel с помощью VBScript 'Создать экземпляр объекта

Set oXL = CreateObject("Excel.application")
oXL.Visible = True

Set oWB = oXL.Workbooks.Open("FilePath.xlsx")
Set oSheet = oWB.Worksheets("Sheet1")         'Source Sheet in workbook
Set oDestSheet = oWB.Worksheets("Sheet2")       'Destination sheet in workbook

r = oSheet.usedrange.rows.Count
c = oSheet.usedrange.columns.Count

For i = 1 To r
    For j = 1 To c
        If oSheet.Cells(i,j).font.Bold = True Then

            oSheet.cells(i,j).copy
            oDestSheet.Cells(i,j).pastespecial
        End If
    Next
Next

oWB.Close
oXL.Quit
0
Ashok Kumar Ammineni