使用VBA将单元格值保留在Excel中保留格式从一个单元格到另一个单元格

时间:2012-08-07 15:15:16

标签: excel vba formatting copy cell

在excel中,我正在尝试将文本从一个单元格复制到另一个单元格中的另一个单元格。源单元格包含格式化文本(粗体,带下划线,不同颜色)。但是当我使用VBA将文本复制到另一个单元格时,格式化将丢失。

我知道这是因为excel只复制文本值。我们有没有办法从单元格中读取 HTML文本 (而不是纯文本)

我用Google搜索了这个并没有得到任何答案。我知道如果我们使用复制和粘贴方法,我们可以复制格式。 E.g。

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

5 个答案:

答案 0 :(得分:7)

使用Excel 2010?尝试

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

答案 1 :(得分:5)

复制格式:

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

其他属性(字体,颜色,etc)也可以通过直接以相同的方式寻址范围对象属性来复制

答案 2 :(得分:3)

我更愿意避免使用select

     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 :(得分:1)

Sub CopyValueWithFormatting()
    Sheet1.Range("A1").Copy
    With Sheet2.Range("B1")
        .PasteSpecial xlPasteFormats
        .PasteSpecial xlPasteValues
    End With
End Sub

答案 4 :(得分:0)

将粗体文本从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