【问题标题】:vba to copy range of cells to new workbookvba将单元格范围复制到新工作簿
【发布时间】:2017-02-23 10:22:52
【问题描述】:

我想将多个工作表复制到从范围 (A3) 开始到每个表的表末尾的新工作簿,因此使用了以下代码,但它复制了整个工作表。

Private Sub Copytonewworkbook_Click()
Dim NewName As String
Dim nm As name
Dim ws As Worksheet

If MsgBox("Copy specific sheets to a new workbook" & vbCr & _
"New sheets will be pasted" , vbYesNo, "NewCopy") = vbNo Then 
Exit Sub
With Application
.ScreenUpdating = False
On Error GoTo ErrCatcher
Sheets(Array("Payroll", " Bank Letter")).Copy
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
    ws.Cells(3,33)Paste:=xlCellTypeFormulas
    Application.CutCopyMode = False
    Cells(1, 1).Select
    ws.Activate
    Next ws
    Cells(1, 1).Select
    For Each nm In ActiveWorkbook.Names
    nm.Delete
    Next nm
    NewName = InputBox("Please Specify the name of your new workbook", "New Copy")
    ActiveWorkbook.SaveCopyAs ThisWorkbook.Path & "\" & NewName & ".xls"
    ActiveWorkbook.Close SaveChanges:=False
    .ScreenUpdating = True
    End With
    Exit Sub
    ErrCatcher:
    MsgBox "Specified sheets do not exist within this workbook"
    End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    这是一种可能的方法(有点高级,因为它不使用副本,但它获取值):

    Public Sub CopyMe()
    
        Dim lLastRow    As Long
        Dim rngToCopy   As Range
        Dim shtTarget   As Worksheet
    
        With ActiveSheet
            lLastRow = .Cells(.Rows.Count, 1).End(xlUp).row
            Set rngToCopy = .Rows("3:" & lLastRow)
        End With
    
        Set shtTarget = ActiveWorkbook.Worksheets("Report")
    
        shtTarget.Rows("1:" & rngToCopy.Rows.Count).value = rngToCopy.value
    
    End Sub
    

    您将活动表第一列中从第三行到最后一个值的行复制到名为Report 的工作表中。

    补充: 即时,无需尝试,您也可以这样做:

    Sheets(Array("Payroll", " Bank Letter")).Copy
    On Error Resume Next
    For Each ws In ActiveWorkbook.Worksheets
        ws.Paste:=xlCellTypeFormulas
        WS.ROWS("1:3").Clear
    

    【讨论】:

    • 感谢 Vityata,这是复制到同一个工作簿中准备好的工作表时的好方法,但我想做的是根据我的代码中的一个工作簿中的定义范围将多个工作表复制到新工作簿但需要更正才能在这一行特别做到这一点 (ws.Cells(3,33)Paste:=xlCellTypeFormulas)
    • @NabilAmer - 查看版本。一般来说,肯定有一种更聪明的方法可以做到这一点,但是您应该为此更改整个代码。这实际上是一个 15 分钟的工作。
    • 能否请您更改我的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多