如何在VBA Excel中粘贴数值而不带有字体/颜色/背景颜色格式?

3

我有一个宏,可以从一系列的工作表中复制摘要行。 摘要行采用特殊格式进行了字体/字体颜色/背景颜色设置,但是当粘贴到“摘要表”中时,需要仅粘贴值而不带格式。

For LoopIndex = StartIndex To EndIndex
    ' start in a task sheet
    Sheets(LoopIndex).Select
    CopiedCells = ActiveSheet.Range("A156:L156").Copy

    ' now move to Summary sheet
    Sheets("Summary Sheet").Select
    ActiveSheet.Range("A8").Select
    ActiveCell.EntireRow.Insert

    ActiveCell.PasteSpecial Paste:=xlPasteValues
    ' tried variations of: ActiveCell.PasteSpecial paste:=xlValues, operation:=xlPasteSpecialOperationNone

    Application.CutCopyMode = False ' clears clipboard
Next LoopIndex

我做的所有研究都表明PastSpecial, xlValues,xlPasteValues应该可以工作,但是没有什么能够去除格式,不知道我在这里做错了什么。它确实粘贴了值而不是引用的值,所以这很好。我有一个宏在循环中重置格式,但我想使它更有效率。我正在使用Excel 2007。

3个回答

6

这真的很奇怪!

原因是您正在复制、粘贴,然后再粘贴。请尝试使用插入、复制,然后再粘贴:

'we must commence on the Summary Sheet
Sheets("Summary Sheet").Select
For LoopIndex = StartIndex To EndIndex

    ' insert the row before we start
    ActiveSheet.Range("A8").Select
    ActiveCell.EntireRow.Insert

    ' select the task sheet
    Sheets(LoopIndex).Select
    CopiedCells = ActiveSheet.Range("A156:L156").Copy

    ' now move to Summary sheet
    Sheets("Summary Sheet").Select

    ActiveCell.PasteSpecial Paste:=xlPasteValues
    ' tried variations of: ActiveCell.PasteSpecial paste:=xlValues, operation:=xlPasteSpecialOperationNone

    Application.CutCopyMode = False ' clears clipboard
Next LoopIndex

就我所知,使用复制和粘贴功能会出现问题。这意味着在宏运行时,您不能做太多其他的事情。

由于它是一个固定范围,我建议这样做:

For LoopIndex = StartIndex To EndIndex
    Sheets("Summary Sheet").Range("A8").EntireRow.Insert
    For i = 1 To 12
        Sheets("Summary Sheet").Cells(8, i) = Sheets(LoopIndex).Cells(156, i)
    Next
Next

你如何在复制之前插入东西? - TylerH

4
ActiveSheet.Range("A1").EntireRow.Copy
ActiveSheet.Range("A2").EntireRow.PasteSpecial xlPasteValues
Application.CutCopyMode = False

或者
ActiveSheet.Range("A2").EntireRow.Value = ActiveSheet.Range("A1").EntireRow.Value

将A1替换为您的源语言,将A2替换为您的目标语言。


我知道,这应该可以工作,对吧?但是不行,它没有起作用。也许在客户提供的工作簿中有一些奇怪的设置。我可以手动粘贴而不带格式,但不能通过VBA代码实现。还有其他建议吗? - Stay-at-home-dad
我唯一的解释是该工作表未处于活动状态。尝试将ActiveSheet替换为Tablename。 - marg

4

我选择了范围后,然后执行以下操作:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

这个方法对我来说可行 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接