在Excel中使用VBA将保存格式的单元格值从一个单元格复制到另一个单元格

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

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

我GOOGLE了这一点,并没有得到任何答案。 我知道,如果我们使用复制和粘贴方法,我们可以复制格式。 例如

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 

要复制格式:

 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 

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

使用Excel 2010? 尝试

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

我宁愿避免使用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 
 Sub CopyValueWithFormatting() Sheet1.Range("A1").Copy With Sheet2.Range("B1") .PasteSpecial xlPasteFormats .PasteSpecial xlPasteValues End With End Sub 

将粗体文本复制从Excel中的一张到另一张使用VBScript创build实例对象

 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