我遇到了一些将范围复制到新工作簿的代码,但我不确定它为什么会工作。
Worksheets("Short Form").Copy
Set wb = ActiveWorkbook
如果代码所说的是将活动工作簿分配给引用'wb',那么如何将工作表'Short Form'复制到新工作簿?它甚至不使用.add方法。现在我想只将值粘贴到这个新工作簿上,但不太确定如何这样做,因为我不理解这段代码。
答案 0 :(得分:1)
试试这个 - 因为以下手动步骤与您的代码段相同:
1.打开空白工作簿
2.按录制宏
3.右键单击Sheet1工作簿选项卡
4.选择“移动或复制”
5.在“预订”组合选择(新书)
6.检查“创建副本”框,使窗口现在如下所示:
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