6

这应该很简单,但是我一直在拖网论坛和 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 类失败”错误。我尝试了以下修复但没有运气:

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

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

4

2 回答 2

19

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

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
于 2012-09-09T16:46:20.803 回答
5

这对我有用。

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
于 2016-02-26T09:55:27.803 回答