【问题标题】:Copying range and pasting into new workbook复制范围并粘贴到新工作簿
【发布时间】:2012-09-02 16:05:17
【问题描述】:

这应该很简单,但我已经在论坛和 SO 答案中搜索了几个小时,但没有找到答案,所以我(不情愿地)创建了我自己的问题。

我要做的只是创建一个新工作簿,然后将另一个工作簿中的范围粘贴到该工作簿中。听起来很简单..?

我原来的工作簿,我们称之为 Book1。我正在尝试创建一个新工作簿 Book2,我会将单元格 A1:B10 的 复制到该工作簿。

这是我的代码的一个版本(从 Book1 打开开始):

Range("A1:B10").Copy
Set NewBook = Workbooks.Add
    With NewBook
        .SaveAs Filename:="Book2.xls"
    End With
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

这会产生“PasteSpecial of Range class failed”错误。我尝试了以下修复,但没有成功:

  • 在代码中添加了'Workbooks("Book2.xls").Activate'
  • 删除了 PasteSpecial 行中的额外参数
  • 尝试使用“.Paste”而不是“.PasteSpecial”
  • 将“Selection.PasteSpecial”更改为“ActiveSheet.PasteSpecial”
  • 明确引用复制范围,包括工作簿和工作表引用
  • 首先创建新工作簿,然后执行复制,然后重新激活新工作簿并粘贴

上述解决方案均无效...现阶段的任何智慧都将不胜感激!

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这是你正在尝试的吗?我已经对代码进行了注释,以便您理解代码的作用不会有任何问题。

    Option Explicit
    
    Sub Sample()
        Dim wbI As Workbook, wbO As Workbook
        Dim wsI As Worksheet, wsO As Worksheet
    
        '~~> Source/Input Workbook
        Set wbI = ThisWorkbook
        '~~> Set the relevant sheet from where you want to copy
        Set wsI = wbI.Sheets("Sheet1")
    
        '~~> Destination/Output Workbook
        Set wbO = Workbooks.Add
    
        With wbO
            '~~> Set the relevant sheet to where you want to paste
            Set wsO = wbO.Sheets("Sheet1")
    
            '~~>. Save the file
            .SaveAs Filename:="C:\Book2.xls", FileFormat:=56
    
            '~~> Copy the range
            wsI.Range("A1:B10").Copy
    
            '~~> Paste it in say Cell A1. Change as applicable
            wsO.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        End With
    End Sub
    

    【讨论】:

      【解决方案2】:

      这对我有用。

      Private Sub CommandButton1_Click()
      Dim newWB As Workbook, currentWB As Workbook
      Dim newS As Worksheet, currentS As Worksheet
      
      'Copy the data you need
      Set currentWB = ThisWorkbook
      Set currentS = currentWB .Sheets("Sheet1")
      currentS .Range("A:M").Select
      Selection.Copy
      
      'Create a new file that will receive the data
      Set newWB = Workbooks.Add
          With newWB
              Set newS = newWB.Sheets("Sheet1")
              newS.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
              SkipBlanks:=False, Transpose:=False
              'Save in CSV
              Application.DisplayAlerts = False
              .SaveAs Filename:="C:\Temporary.csv", FileFormat:=xlCSV
              Application.DisplayAlerts = True
          End With
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多