-1

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

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

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

4

2 回答 2

1

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

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
于 2013-03-13T21:19:39.527 回答
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
于 2013-03-13T21:27:17.833 回答