【问题标题】:Copying the cell value preserving the formatting from one cell to another in excel using VBA使用VBA将单元格值从一个单元格复制到另一个单元格
【发布时间】:2012-08-04 15:30:36
【问题描述】:

在 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

【问题讨论】:

标签: excel vba formatting copy cell


【解决方案1】:

复制格式:

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)也可以通过以相同方式直接寻址范围对象属性来复制

【讨论】:

  • 感谢您的回复。但是您的方法没有捕获字体颜色(具有不同字体颜色的文本的单元格)
  • 谢谢@sean cheshire。将答案添加为问题的编辑。
  • 我确认@Sean Cheshire 解决方案运行良好,并且还在复制字体样式(粗体、斜体、下划线、颜色等)。这是我个人在宏中所做的: Range(cmetsColumnName + sSourceRowNum).Copy Range(cmetsColumnName + sTargetRowNum).PasteSpecial (xlPasteAllUsingSourceTheme) Application.CutCopyMode = False 就像一个魅力,而循环需要太多时间!
【解决方案2】:

使用 Excel 2010 吗?试试

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

【讨论】:

  • 这是唯一适用于 Excel 2010 的解决方案。谢谢!
【解决方案3】:

我宁愿避免使用选择

     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

【讨论】:

  • 避免选择是一种更好的方法。但是,这种方法似乎也没有像源单元格中那样捕获字体颜色(单元格中的文本具有不同的字体颜色)
  • 我更新了应该包括字体复制的答案。希望这就是你要找的东西
【解决方案4】:
Sub CopyValueWithFormatting()
    Sheet1.Range("A1").Copy
    With Sheet2.Range("B1")
        .PasteSpecial xlPasteFormats
        .PasteSpecial xlPasteValues
    End With
End Sub

【讨论】:

  • 你的回答对我来说是完美的
【解决方案5】:

在 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2014-04-09
    • 1970-01-01
    • 2017-02-18
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多