excel 如何跳过某些单元格VBA xlPasteValues命令,并保持公式在特定范围内

wkyowqbh  于 2023-01-03  发布在  其他
关注(0)|答案(1)|浏览(205)

我正在尝试修改此VBA代码,以便它不会粘贴所有单元格的值。

Sheets("Report").Copy
    Sheets(1).name = "PrintOut"
    Sheets("PrintOut").UsedRange.Copy
    Sheets("PrintOut").Range("A1").Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

现在它复制和粘贴所有单元格的值并删除公式。我需要它粘贴除I206和I207之外的所有其他单元格的值。这些单元格中的公式需要在新的“打印输出”工作表中。
通过将xlPasteValues改为xlPasteFormulas,它确实粘贴了公式,但粘贴到了所有单元格。
我还在名称管理器中将希望保存公式的区域命名为“PrintOut_Formulas”,因此这可能是需要在“PrintOut”中包含公式的区域。
有人知道这个的好方法吗?
谢谢!

qzwqbdag

qzwqbdag1#

将范围转换为值“跳过区域”

Sub ExportWorksheet()
    
    Dim swb As Workbook: Set swb = ThisWorkbook ' workbook containing this code
    Dim sws As Worksheet: Set sws = swb.Sheets("Report")
    
    sws.Copy
    
    ' or (as before)
    'Sheets("Report").Copy ' not recommended
    
    Dim dwb As Workbook: Set dwb = Workbooks(Workbooks.Count)
    Dim dws As Worksheet: Set dws = dwb.Sheets(1)
    dws.Name = "PrintOut"
    
    ' Put the formulas in an array.
    Dim dfrg As Range: Set dfrg = dws.Range("I206:I207")
    Dim dfData As Variant: dfData = dfrg.Formula
    
    ' Convert to values (more efficient).
    With dws.UsedRange
        .Value = .Value
    End With
     
    ' Write back the formulas.
    dfrg.Formula = dfData
         
    'dwb.SaveAs "C:\Test\Test.xlsx"
    'dwb.Close SaveChanges:=False
    
End Sub

相关问题