2016-11-02 5 views
0

Мне нужно скопировать 2 листа и сохранить в другом файле.Скопируйте 2 листа vba excel

мне нужно скопировать все листы "Фронт" и снизу добавить диапазон ("A2: N10") из листов "Кэш"

Worksheets("Front").Copy 
 
    With ActiveSheet.UsedRange 
 
     .Value = .Value 
 
    End With 
 
    
 
    Set wbNew = ActiveWorkbook 
 
    wbNew.SaveAs "C:\______\pl.xlsx" 
 
    wbNew.Close True

Результат: Новый файл «пл. XLSX» где A1: N25 = Sheets Передние

A26: N43 = Sheets Cache: D

Любые предложения?

+0

Excel имеет большую функцию, которая называется [запись макросов] (http://www.dummies.com/software/microsoft-office/ первенствует/как к записи-а-макро-на-автоматизировать-задач-в-первенствовать-2010 /). Вы можете использовать это, чтобы записать свои ручные действия как VBA, в следующий раз. –

+0

Что вы имеете в виду, скопировав все листы «Фронт»? Есть ли более одного листа с именем «Фронт»? –

+0

У меня есть файл xlslx для создания Packing List. В этом файле у меня есть 2 листа, FRONT и кеш. Мне нужно скопировать два листа в новый файл (сохранить как). Диапазон от COPY от FRONT A1: N24, RANGE TO COPY от CACHE: динамическое значение - в момент a2: N10. Теперь вставьте в новый файл: -Value ОТ «ФРОНТ» -Value ОТ «КЭШ» я сделать это руководство и сделать экран http://srv3.sendfile.pl/pobierz/950031--- wkfb/5316677400_1326980696.jpg – Grz3siu

ответ

0

при условии, что рабочие листы «Front» и «Cache» в книге макрос проживает в, то вы можете ввести:

Sub main() 
    Worksheets("Front").Copy '<--| this creates a new workbook with one worksheet that becomes the "active" one 
    ThisWorkbook.Worksheets("Cache").Range("A2:N10").Copy '<--| 'ThisWorkbook' refers to the workbook the running macro resides in, no matter which is the "active" workbook 
    Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial '<--| no need to qualify range references up to its worksheet to implicitly assume the "active" one 
    Application.CutCopyMode = False 
End Sub 

Хотя если рабочие листы «Front» и «Кэш» НЕ в книге макрос проживает в, то вы можете ввести:

Sub main2() 
    Dim rngToCopy As Range 

    Set rngToCopy = Worksheets("Cache").Range("A2:N10") '<--| set the range to copy before changing the "active" workbook with the worksheet 'Copy' method call   
    Worksheets("Front").Copy '<--| this creates a new workbook with one worksheet that becomes the "active" one 
    rngToCopy.Copy '<--| copy the range you previously stored 
    Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial '<--| no need to qualify range references up to its worksheet to implicitly assume the "active" one 
    Application.CutCopyMode = False 
End Sub 
0
Sub z() 
Dim NewSheet, Cache1, Front1 As Worksheet 
Dim LastRow As Integer 
Set Front1 = ActiveWorkbook.Worksheets("Front") 
Set Cache1 = ActiveWorkbook.Worksheets("Cache") 
Front1.Copy 
Set NewSheet = ActiveWorkbook.ActiveSheet 
LastRow = Front1.UsedRange.Rows(Front1.UsedRange.Rows.Count).Row + 1 
Cache1.Range("A2:N10").Copy 
NewSheet.Cells(LastRow, 1).PasteSpecial 
Application.CutCopyMode = False 
End Sub 

После того, как объявлены листы, их легко перемещать. Я проверил эту часть; затем запустить Сохранить код

+0

только некоторые (возможно) примечания usefule 1) нет необходимости в 'Set NewSheet = ActiveWorkbook.ActiveSheet' (как и для объявления NewSheet), так как после' Front1.Copy' вновь созданная книга становится «активная» рабочая книга, и ее единственным рабочим листом становится ее «активный» рабочий лист 2), следовательно, «NewSheet.Cells (LastRow, 1) .PasteSpecial' может стать« Cells (LastRow, 1) .PasteSpecial' 3), вы также можете избежать деклараций и вычисление 'LastRow', как вы можете видеть за мой ответ – user3598756

+0

Я всегда объявляю их, поэтому я могу переключиться позже –

Смежные вопросы