将范围复制到新工作簿

时间:2013-03-13 15:03:41

标签: excel vba excel-vba copy

我遇到了一些将范围复制到新工作簿的代码,但我不确定它为什么会工作。

Worksheets("Short Form").Copy
Set wb = ActiveWorkbook

如果代码所说的是将活动工作簿分配给引用'wb',那么如何将工作表'Short Form'复制到新工作簿?它甚至不使用.add方法。现在我想只将值粘贴到这个新工作簿上,但不太确定如何这样做,因为我不理解这段代码。

2 个答案:

答案 0 :(得分:1)

试试这个 - 因为以下手动步骤与您的代码段相同:

1.打开空白工作簿
2.按录制宏
3.右键单击Sheet1工作簿选项卡
4.选择“移动或复制”
5.在“预订”组合选择(新书)
6.检查“创建副本”框,使窗口现在如下所示:
enter image description here 7.停止录像机
8.去找你录制的代码......瞧......我的看起来像这样

Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'
    Sheets("Sheet1").Select
    Sheets("Sheet1").Copy
End Sub

您的代码与这些手动步骤描述的代码相同。


你必须在某处有一条线Dim wb as workbook,否则它就不会运行。

此行Set wb = ActiveWorkbook将使对象wb等于您已复制到的新工作簿,因为它处于活动状态,因此您可以对其进行进一步操作。您可以轻松切换wb所指向的工作簿:

Sub Macro1()
Dim wb As Workbook

ThisWorkbook.Sheets("Sheet1").Copy
Set wb = ActiveWorkbook
MsgBox wb.Name
ThisWorkbook.Activate
Set wb = ActiveWorkbook
MsgBox wb.Name

End Sub

<强> BUT
在我的生产代码中,我通常从不使用Set x To ActiveWorkbook我总是将工作簿命名为然后使用Set x To Workbooks("DefiniteName")


不使用剪贴板
如果您想避免使用剪贴板,则以下示例显示如何在不使用粘贴的情况下移动仅值数据:

Sub WithoutPastespecial()


Dim firstRange As Range
Set firstRange = ThisWorkbook.Worksheets("Short Form").Range("S4:S2000") 'can change S4:S2000 to the range you want to copy

Dim newBk As Workbook
Dim secondRange As Range
Set newBk = Workbooks.Add
Set secondRange = newBk.Worksheets("Sheet1").Range("A1")

With firstRange
      Set secondRange = secondRange.Resize(.Rows.Count, .Columns.Count)
End With
secondRange.Value = firstRange.Value

End Sub

答案 1 :(得分:0)

请注意,这不是复制Range而是复制整个电影表:)

如果您使用以下方法:

Worksheets("Short Form").Cells.Copy

然后,您将只复制单元格,而不是整个工作表,并且此方法不会创建新工作簿。您可以告诉它在必要时添加工作簿。

以下是一个例子:

Option Explicit

Sub CopyNew()
Dim wbNew As Workbook
Dim wb As Workbook

Set wb = ThisWorkbook  'It is a good idea to explicitly control workbooks using either a defined variable like "wb" or the "ThisWorkbook" object, instead of using "ActiveWorkbook" or referring to files by name.

Application.CutCopyMode = False
wb.Sheets("Short Form").Cells.Copy


'Add a new workbook for the values:
Set wbNew = Workbooks.Add

wbNew.Sheets(1).Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False


End Sub