Как да дублирате лист в Excel с VBA

  • Споделя Това
Michael Brown

В урока е представена колекция от макроси за дублиране на листове в Excel: копиране и преименуване въз основа на стойността на клетката, копиране на няколко листа, копиране на активен работен лист в друг файл, без да го отваряте, и др.

Ръчното копиране на листове в Excel е доста бързо и лесно... ако се извършва само веднъж или два пъти. Дублирането на няколко листа многократно е скучно и отнема много време. На тази страница ще намерите няколко полезни макроса за автоматизиране на тази задача.

    Excel VBA за копиране на лист в нова работна книга

    Този най-прост макрос от един ред прави точно това, което подсказва името му - копира активния лист в нова работна книга.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Копиране на няколко листа в Excel с VBA

    Ако искате да копирате няколко листа от активната работна книга в нова, изберете всички работни листове, които ви интересуват, и стартирайте този макрос:

    Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End Sub

    Excel VBA за копиране на лист в друга работна книга

    В зависимост от това къде искате да вмъкнете копирания лист, използвайте един от следните макроси.

    Копиране на лист в началото на друга работна книга

    Този макрос копира активния лист преди всички останали работни листове във файла на местоназначението, Книга1 За да копирате в друг файл, заменете "Book1.xlsx" с пълното име на целевата работна книга.

    Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheets(1) End Sub

    Копиране на лист в края на друга работна книга

    Тази част от кода дублира активния работен лист и поставя копието в края на Книга1 Отново не забравяйте да замените "Book1.xlsx" с името на целевата работна книга.

    Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx" ).Sheets(Workbooks( "Book1.xlsx" ).Worksheets.Count) End Sub

    Забележка: За да работят макросите, целевата работна книга трябва да бъде записана на вашия твърд диск или в мрежата.

    Копиране на лист в избрана работна книга

    За да можете да копирате текущия лист във всяка отворена работна книга, можете да създадете UserForm (с име UserForm1 ) с a ListBox управление ( с име ListBox1 ) и два бутона:

    След това щракнете два пъти върху формата и поставете следния код в прозореца "Код":

    Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex> -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide EndПод

    След като UserForm е създаден, можете да използвате един от следните макроси, за да копирате активния лист в избрана от вас работна книга.

    Копиране на лист в началото на избраната работна книга :

    Public Sub CopySheetToBeginningAnotherWorkbook() Зареждане на UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Разтоварване на UserForm1 End Sub

    Копиране на лист в край на избраната работна книга :

    Public Sub CopySheetToEndAnotherWorkbook() Зареждане на UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Разтоварване на UserForm1 End Sub

    Когато се стартира в Excel, макросът ще ви покаже списък с всички отворени в момента работни книги. Избирате необходимата и щраквате върху OK:

    Макрос на Excel за копиране на лист и преименуване

    Когато копирате лист в Excel, на копието се дава име във формат по подразбиране, например Лист 1 (2) Следните макроси могат да ви спестят необходимостта да променяте ръчно името по подразбиране.

    Този код дублира активния работен лист, дава име на копието "Тестов лист" (можете да го замените с друго име, което желаете) и поставя копирания лист в края на текущата работна книга.

    Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Test Sheet" End Sub

    За да позволите на потребителя да посочете името на копирания лист , използвайте този код:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Въведете името на копирания работен лист" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    При стартиране макросът показва следното поле за въвеждане, в което въвеждате желаното име и натискате OK:

    Макрос на Excel за копиране на лист и преименуване въз основа на стойността на клетката

    В някои ситуации може да е по-удобно да се именува копие с конкретна стойност на клетка, например заглавие на колона. За тази цел просто използвайте горния код и задайте стойността на текущо избрана клетка както и в предишния пример, копието ще бъде поставено в края на активната работна книга.

    Най-сложното е да накарате потребителите винаги да избират правилната клетка, преди да стартират макроса :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox("Въведете името на копирания работен лист" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Като алтернатива можете да кодирайте твърдо адреса на клетката по която трябва да се именува копието, клетка A1 в кода по-долу. За да именувате копирания работен лист въз основа на друга клетка, заменете A1 с подходяща референция към клетка.

    Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range("A1" ).Value "" Then On Error Resume Next activeSheet.Name = wks.Range("A1" ).Value End If wks.Activate End Sub

    Макрос за копиране на работен лист в затворена работна книга

    Този макрос копира активния лист в края на затворена работна книга. Името на друга работна книга не е посочено в кода - макросът ще отвори стандартния прозорец на Windows Explorer и ще ви позволи да изберете всеки целеви файл:

    След като изберете файла и щракнете върху Отворете , макросът ще копира активния лист и автоматично ще затвори целевата работна книга.

    Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Files (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Workbooks. Open (fileName) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)Затвори книгата. Затвори ( True ) Application.ScreenUpdating = True End If End Sub

    Excel VBA за копиране на лист от друга работна книга без отваряне

    Този макрос ви позволява да копирате работен лист от друг файл на Excel, без да го отваряте. Копираният лист ще бъде вмъкнат в края на текущата работна книга.

    Само не забравяйте да направите няколко замени в кода:

    • C:\Users\XXX\Documents\Target_Book.xlsx трябва да се промени на действителния път и име на работната книга, от която искате да копирате лист.
    • Sheet1 трябва да се замени с името на листа, който искате да копирате.
    Public Sub CopySheetFromClosedWorkbook() Dim sourceBook As Workbook Application.ScreenUpdating = False Set sourceBook = Workbooks. Open ("C:\Users\XXX\Documents\Target_Book.xlsx" ) sourceBook.Sheets("Sheet1" ).Copy After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) sourceBook. Close Application.ScreenUpdating = True End Sub

    Excel VBA за дублиране на лист няколко пъти

    Понякога може да се наложи да дублирате един и същ лист повече от веднъж, например за да тествате различни формули върху един и същ набор от данни. Това може лесно да се направи със следния макрос.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Колко копия на активния лист искате да направите?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Отворете оригиналния лист, стартирайте макроса, посочете колко копия на активния лист искате да направите и щракнете върху OK :

    Как да дублирате листове в Excel с VBA

    За да копирате лист в Excel с един от горните макроси, можете да вмъкнете кода VBA в собствената си книга или да стартирате макрос от нашата примерна работна книга.

    Как да добавите макрос в работната си книга

    За да вмъкнете кода в работната си книга, изпълнете следните стъпки:

    1. Отворете работния лист, който искате да копирате.
    2. Натиснете Alt + F11, за да отворите редактора на Visual Basic.
    3. В левия прозорец щракнете с десния бутон на мишката върху Тази работна книга , след което щракнете върху Вмъкване на > Модул .
    4. Поставете кода в прозореца Код.
    5. Натиснете F5, за да стартирате макроса.

    За подробни инструкции стъпка по стъпка вижте Как да вмъкнем VBA код в Excel.

    Как да стартирате макрос от нашата примерна работна книга

    Като алтернатива можете да изтеглите нашата примерна работна книга за Дублиране на листове в Excel и да стартирате кода оттам.

    Примерната работна книга съдържа следните макроси:

    CopySheetToNewWorkbook - копира текущия работен лист в нова работна книга.

    CopySelectedSheets - копира няколко избрани листа в нова работна книга.

    CopySheetToBeginningAnotherWorkbook - копира активния лист в началото на друга работна книга.

    CopySheetToEndAnotherWorkbook - копира активния лист в края на друг файл на Excel.

    CopySheetAndRename - дублира текущия лист, преименува го според указанията на потребителя и поставя копието след всички останали листове в текущата работна книга.

    CopySheetAndRenamePredefined - дублира активния лист, дава твърдо зададено име на копието и го поставя в края на текущата работна книга.

    CopySheetAndRenameByCell - създава копие на активния лист и го преименува въз основа на стойността на избраната клетка.

    CopySheetAndRenameByCell2 - копира активния лист и го преименува въз основа на твърдо зададения адрес на клетката.

    CopySheetToClosedWorkbook - ви позволява да копирате лист в затворена работна книга.

    CopySheetFromClosedWorkbook - ви позволява да копирате лист от друг файл на Excel, без да го отваряте.

    DuplicateSheetMultipleTimes - ви позволява да дублирате даден лист в Excel многократно.

    За да стартирате макроса в Excel, просто направете следното:

    1. Отворете изтеглената работна книга и разрешете съдържанието, ако получите подкана.
    2. Отворете собствената си работна книга и отидете на листа, който искате да копирате.
    3. В работния си лист натиснете Alt + F8 , изберете интересуващия ви макрос и щракнете върху Изпълнявайте .

    Ето как можете да дублирате лист в Excel с VBA. Благодаря ви, че прочетохте, и се надявам да се видим в нашия блог следващата седмица!

    Майкъл Браун е отдаден технологичен ентусиаст със страст към опростяване на сложни процеси с помощта на софтуерни инструменти. С повече от десетилетие опит в технологичната индустрия, той е усъвършенствал уменията си в Microsoft Excel и Outlook, както и в Google Sheets и Docs. Блогът на Майкъл е посветен на споделянето на неговите знания и опит с други, предоставяйки лесни за следване съвети и уроци за подобряване на продуктивността и ефективността. Независимо дали сте опитен професионалист или начинаещ, блогът на Michael предлага ценни прозрения и практически съвети за извличане на максимума от тези основни софтуерни инструменти.