我遇到了一些将范围复制到新工作簿的代码,但我不确定它为什么有效。
Worksheets("Short Form").Copy
Set wb = ActiveWorkbook
当代码所说的只是将活动工作簿分配给引用'wb'时,如何将工作表'Short Form'复制到新工作簿?它甚至不使用 .add 方法。现在我只想将值粘贴到这个新工作簿中,但不太确定如何执行此操作,因为我不理解这段代码。
试试这个 - 因为以下手动步骤与您的代码片段相同:
1.打开一个空白工作簿
2.按记录宏
3.右键单击 Sheet1 工作簿选项卡4.选择
“移动或复制”
5.在“预订”组合中选择(新书)
6.选中“创建副本”框,使窗口现在看起来像这样:
7.停止记录器
8.Go 并找到您记录的代码......瞧......我的看起来像这样
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
但是
在我的生产代码中,我通常从不使用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
请注意,这不是复制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