2015-07-15 2 views
0

Я хочу скопировать/вставить весь рабочий лист, введя значения/формулу в ячейках в другую новую книгу.Копировать/Вставить ячейки и значение

Этот код только что скопировал первый ws, но не все остальные. Как я могу убедиться, что все ws будут скопированы и вставлены без написания всех имен из ws в vba-коде?

Sub CopyPaste() 
Dim ws As Worksheet, wb As Workbook 
Set ws = ActiveSheet 
Set wb = Workbooks.Add(xlWBATWorksheet) 
ws.Range("A1:G10").Copy 
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteValues 
wb.Sheets(1).Range("A1").PasteSpecial Paste:=xlPasteFormats 
Application.CutCopyMode = False 
End Sub 
+1

Если вы хотите, чтобы скопировать все листы со всеми данными и всеми формулами и все форматирование к новой книге, почему бы не ** сохранить старую книгу под новым имя** ?? –

+0

Да, но это не вариант, потому что позже я не буду использовать этот Excel-woorkbook, и он должен это сделать, потому что пользователь этого не сделает, поэтому я уверен, что с кодом vba это происходит –

+0

@Nicola Код почти работает, но отладчик имеет проблему со столбцом: «workbook.Sheets (index) .....» ошибка 9, поэтому я попробовал это с именем wb (test) workbook.Sheets (тест) ... но оно не работают –

ответ

0

Так Я предполагаю, что вы сохраните вторую книгу для ее названия? поэтому просто добавьте свой путь ниже, где вы хотите его сохранить, и теперь он сохраняет имена листов. Я не уверен, почему вы получаете ошибку отладчика, что он работает отлично для меня, попробуйте этот код и посмотрите, все ли вы его получите?

Sub newworkbook() 
Dim WBN As workbook, WBC As workbook, WB As workbook 
Dim WS As String 
Dim SHT As Worksheet 

Set WBN = Workbooks.Add 

For Each WB In Application.Workbooks 

If WB.Name <> WBN.Name Then 
For Each SHT In WB.Worksheets 
    SHT.Copy After:=WBN.Sheets(WBN.Worksheets.Count) 
    WBN.Sheets(WBN.Worksheets.Count).Name = (SHT.Name) & " " 
Next SHT 
End If 
Next WB 
Application.DisplayAlerts = False 
WBN.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete 
WBN.Application.DisplayAlerts = True 
ActiveWorkbook.SaveAs "C:\YOURPATH\timetable_v2.xls" 'change path to whatever 
End Sub 
+0

Ну проблема с ошибкой 9 все еще существует, поэтому она не будет называться так, как я хотел, но вы мне очень помогаете –

+0

Я просто удалил 'WBN.Sheets (Array (« Sheet1 »,« Sheet2 », «Лист3»)). Удалить ' И отлично работает –

+0

Отлично, рад, что вы там! – Calum

0

Вы можете попробовать следующим образом:

Sub CopyPaste() 

    Dim aSheet As Worksheet 
    Dim workbook As workbook 
    Dim index As Integer 

    Set workbook = Workbooks.Add(xlWBATWorksheet) 

    For Each aSheet In Worksheets 

     aSheet.Range("A1:G10").Copy 

     workbook.Sheets(index).Range("A1").PasteSpecial Paste:=xlPasteFormulasAndNumberFormats 

     index = index + 1 

     Application.CutCopyMode = False 

    Next aSheet 


End Sub 
0

Просто имел быстрый взгляд для вас, это, кажется, чтобы сделать работу:

кредит: get digital help

Dim WBN As Workbook, WBC As Workbook, WB As Workbook 
Dim WS As String 
Dim SHT As Worksheet 

Set WBN = Workbooks.Add 
For Each WB In Application.Workbooks 
If WB.Name <> WBN.Name Then 
    For Each SHT In WB.Worksheets 
     SHT.Copy After:=WBN.Sheets(WBN.Worksheets.Count) 
     WBN.Sheets(WBN.Worksheets.Count).Name = Left(WB.Name, 30 - Len(SHT.Name)) & "-" & SHT.Name 
    Next SHT 
End If 
Next WB 
Application.DisplayAlerts = False 
WBN.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete 
WBN.Application.DisplayAlerts = True 
0

Я просто удалил WBN.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Delete И это прекрасно работает

Новая книга сохраняется как файл .xlsx, но я, конечно, нужно его как файл .xlsm .... когда я просто добавил он в путь, он не работает

ActiveWorkbook.SaveAs "U:\Excel\timetable_v2.xlsm"