【问题标题】:vba excel how to paste values without font/color/bg color formattingvba excel如何粘贴没有字体/颜色/ bg颜色格式的值
【发布时间】:2009-10-22 21:40:24
【问题描述】:

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

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。

【问题讨论】:

    标签: excel vba paste


    【解决方案1】:

    这真的很奇怪!

    原因是您正在复制、插入然后粘贴。尝试插入、复制然后粘贴:

    '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
    

    【讨论】:

    • 如何在复制之前插入内容?
    【解决方案2】:
    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 代码。还有其他建议吗?
    • 我唯一的解释是工作表没有激活。尝试用表名替换 ActiveSheet。
    【解决方案3】:

    一旦我选择了范围,我就放了这个

     Selection.PasteSpecial 粘贴:=xlPasteValues,操作:=xlNone 

    对我来说很好:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 1970-01-01
      • 2011-09-11
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      相关资源
      最近更新 更多