Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何将活动工作表的内容复制到新工作簿?_Excel_Vba - Fatal编程技术网

Excel 如何将活动工作表的内容复制到新工作簿?

Excel 如何将活动工作表的内容复制到新工作簿?,excel,vba,Excel,Vba,我正在尝试将活动工作表的内容复制到新工作簿 Sub new_workbook() Dim ExtBk As Workbook Dim ExtFile As String Columns("A:N").Copy Workbooks.Add.SaveAs Filename:="output.xls" ExtFile = ThisWorkbook.Path & "\output.xls" Set ExtBk = Workbooks(Dir

我正在尝试将活动工作表的内容复制到新工作簿

Sub new_workbook()

    Dim ExtBk As Workbook
    Dim ExtFile As String

    Columns("A:N").Copy

    Workbooks.Add.SaveAs Filename:="output.xls"
    ExtFile = ThisWorkbook.Path & "\output.xls"

    Set ExtBk = Workbooks(Dir(ExtFile))
    ExtBk.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

    Application.DisplayAlerts = False
    ExtBk.Save
    Application.DisplayAlerts = True

End Sub
我在
PasteSpecial
行得到一个错误,在主题处指定了错误。我有点困惑,因为如果我将它指向源工作簿,它就会起作用

Sub new_workbook()

    Dim ExtBk As Workbook
    Dim ExtFile As String

    Columns("A:N").Copy

    Workbooks.Add.SaveAs Filename:="output.xls"
    ExtFile = ThisWorkbook.Path & "\output.xls"

    Set ExtBk = Workbooks(Dir(ExtFile))
    ExtBk.Worksheets("Sheet1").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

    Application.DisplayAlerts = False
    ExtBk.Save
    Application.DisplayAlerts = True

End Sub

可能我需要使用Windows(output.xls)?

如果要复制整个区域,请复制工作表:

Worksheets("Sheet1").Copy Workbooks(2).Worksheets(1)
如果它复制了一些您不需要的列,那么您可以在以后删除这些列

如果要从.xlsx复制到.xls,则需要使用复制/粘贴:

Worksheets("Sheet1").UsedRange.Copy Workbooks(2).Worksheets(1).Range("A1")
如果需要粘贴值:

Workbooks(2).Worksheets(1).UsedRange.Copy
Workbooks(2).Worksheets(1).Range("A1").PasteSpecial xlPasteValues

请注意,
UsedRange
不会从A1开始,除非此单元格包含某些内容。在这种情况下,您必须定义一个从A1开始并延伸到最后使用的单元格的
范围
对象。

如果您只关心保存值,请不要使用
复制
方法

Sub new_workbook()
Dim wbMe As Workbook: Set wbMe = ThisWorkbook
Dim ws As Worksheet: Set ws = wbMe.ActiveSheet
Dim ExtBk As Workbook

Set ExtBk = Workbooks.Add
ExtBk.SaveAs Filename:=wbMe.Path & "\output.xls"

ExtBk.Worksheets("Sheet1").Range("A:N").Value = ws.Range("A:N").Value

Application.DisplayAlerts = False
ExtBk.Save
Application.DisplayAlerts = True

End Sub
注意:如果您的
此工作簿
未保存,则此操作将失败(之前的代码也会失败)。

我已使其工作:

Sub cp2NewWb()
    Dim ExtFile As String
    ExtFile = ThisWorkbook.Path & "output.xls"
    Workbooks.Add.SaveAs Filename:="output.xls"

    Windows("test1.xlsm").Activate
    Range("A1:AA100").Copy
    Windows("output.xls").Activate
    Range("A1").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Worksheets(Worksheets.Count).Columns("A:AA").EntireColumn.AutoFit
    Range("A1").Select

    Windows("test1.xlsm").Activate
    Application.CutCopyMode = False
    Range("A1").Select
End Sub

我需要在激活windows之间执行此操作,否则它将不起作用。

源工作簿的文件格式是什么?如果要从xlsx粘贴到xlshmm,可能会尝试粘贴太多行。这是一个xlsx。如果我尝试将其复制到xlsx,它会起作用吗?它更有可能起作用…因此,如果我尝试使用xlsx格式,我会得到一个错误:应用程序定义的错误或对象定义的错误,你从哪里得到错误?我可以复制整张工作表,但如果公式和我希望结果保存在该工作表中,我需要与原始工作簿一样进行特殊粘贴新生成的工作簿。@yatici我在回答中添加了进一步的建议。打得好。通常不需要填充(污染)剪贴板。yea在尝试设置相同的值时给了我相同的错误。@yatici您不可能得到“相同的错误”,因为此代码没有调用
PasteSpecial
方法。那么,你犯了什么错误?啊哈,没关系,它似乎喜欢这样。我忘了把特价贴注释掉。这很好。看起来很慢,但肯定很容易。速度可能是复制整个列的函数,因此,12列*1048576行。大量的数据。如果要将范围修改为实际需要复制的较小数据范围(例如,
range(“A1:N3502”)
等),则性能应该快得多。干杯