2017-02-23 239 views
0

我想複製多個工作表到新工作簿,從範圍(A3)開始到每個表的表結尾,因此使用了以下代碼,但它複製了整個工作表。vba將單元格區域複製到新工作簿

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 

回答

0

這是一個可能的方式做到這一點(有點先進的,因爲它不使用複製,但它得到的值):

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 
+0

謝謝Vityata,複製到一個現成的表在同一工作簿時,這個好辦法,但我想要做的是按照我的代碼,將基於定義範圍的多個工作表複製到新工作簿中,但需要更正才能在此行中專門做這些工作(ws.Cells(3,33)Paste:= xlCellTypeFormulas) –

+0

@NabilAmer - 請參閱版本。一般來說,確實有更聰明的方法來做到這一點,但你應該改變你的整個代碼。這實際上是一個15分鐘的工作。 – Vityata

+0

請問如果可能的話,請在我的代碼中進行更改 –

相關問題