- Копиране на работен лист в нова работна книга
- Копирайте няколко листа в нова работна книга
- Копирайте лист в една и съща работна книга
- Преместване на лист
- Копие и Именен лист
- Копирайте работен лист в друга работна книга
- Копирайте работен лист в затворена работна книга
- Копирайте лист от друга работна книга, без да я отваряте
- Дублиране на Excel лист няколко пъти
Този урок ще обхваща как да копирате лист или работен лист с помощта на VBA.
Копиране на работен лист в нова работна книга
За да копирате работен лист в нова работна книга:
1 | Листове ("Лист1"). Копиране |
Копирайте ActiveSheet в нова работна книга
За да копирате ActiveSheet в нова работна книга:
1 | ActiveSheet.Copy |
Копирайте няколко листа в нова работна книга
За да копирате няколко листа в нова работна книга:
1 | ActiveWindow.SelectedSheets.Copy |
Копирайте лист в една и съща работна книга
Започнахме, като ви показахме най -простия пример за копиране на листове: копиране на лист (и) в нова работна книга. Тези примери по -долу ще ви покажат как да копирате лист в една и съща работна книга. Когато копирате лист в работна книга, трябва да посочите местоположение. За да посочите местоположение, ще кажете на VBA да премести работния лист ПРЕДИ или СЛЕД друг работен лист.
Копирайте лист преди друг лист
Тук ще посочим да копирате и поставите листа преди Sheet2
1 | Листове ("Лист1"). Копиране преди: = Листове ("Лист2") |
Копирайте лист преди първия лист
Вместо да посочите името на листа, можете също да посочите позицията на листа. Тук копираме и поставяме лист преди първия лист в работната книга.
1 | Листове („Лист1“). Копиране преди: = Листове (1) |
Новосъздаденият лист сега ще бъде първият лист в работната книга.
Копиране на лист след последния лист
Използвайте свойството After, за да кажете на VBA да постави листа СЛЕД друг лист. Тук ще копираме и поставим лист след последния лист в работната книга:
1 | Листове ("Sheet1"). Копиране след: = Sheets (Sheets.Count) |
Забележете, че използвахме Sheets.Count, за да преброим броя на листове в работната книга.
Преместване на лист
Можете също да преместите лист в работна книга, като използвате подобен синтаксис. Този код ще премести Sheet1 в края на работната книга:
1 | Листове ("Sheet1"). Преместване след: = Sheets (Sheets.Count) |
Копие и Именен лист
След копиране и поставяне на лист, новосъздаденият лист става ActiveSheet. Така че, за да преименувате нашия нов лист, просто използвайте ActiveSheet.Name:
123456 | Sub CopySheetRename1 ()Листове ("Sheet1"). Копиране след: = Sheets (Sheets.Count)ActiveSheet.Name = "Последен лист"End Sub |
Ако името на листа вече съществува, горният код ще генерира грешка. Вместо това можем да използваме „On Error Resume Next“, за да кажем на VBA да игнорира именуването на Sheet и да продължи с останалата част от процедурата:
12345678 | Sub CopySheetRename2 ()Листове ("Sheet1"). Копиране след: = Sheets (Sheets.Count)На грешка възобновяване следващоActiveSheet.Name = "Последен лист"При грешка GoTo 0End Sub |
Или използвайте нашата функция RangeExists, за да проверите дали името на листа вече съществува, преди да опитате да копирате листа:
123456789101112131415161718 | Sub CopySheetRename3 ()Ако RangeExists ("LastSheet") ТогаваMsgBox "Листът вече съществува."ИначеЛистове ("Sheet1"). Копиране след: = Sheets (Sheets.Count)ActiveSheet.Name = "Последен лист"Край АкоEnd SubФункция RangeExists (WhatSheet As String, незадължително ByVal WhatRange As String = "A1") Като BooleanЗатъмняване като диапазонНа грешка възобновяване следващоЗадайте тест = ActiveWorkbook.Sheets (WhatSheet) .Range (WhatRange)RangeExists = Err.Number = 0При грешка GoTo 0Крайна функция |
Копиране и лист с имена въз основа на стойността на клетката
Може също да искате да копирате и дадете име на лист въз основа на стойността на клетката. Този код ще даде име на работния лист въз основа на стойността на клетката в A1
12345678 | Sub CopySheetRenameFromCell ()Листове ("Sheet1"). Копиране след: = Sheets (Sheets.Count)На грешка възобновяване следващоActiveSheet.Name = Обхват ("A1"). СтойностПри грешка GoTo 0End Sub |
Копирайте работен лист в друга работна книга
Досега сме работили с копиране на таблици в работна книга. Сега ще разгледаме примери за копиране и поставяне на листове в други работни книги. Този код ще копира лист в началото на друга работна книга:
1 | Листове ("Лист1"). Копиране преди: = Работни книги ("Пример.xlsm"). Листове (1) |
Това ще копира работен лист в края на друга работна книга.
1 | Листове ("Sheet1"). Копиране след: = Работни книги ("Example.xlsm"). Листове (Работни книги ("Example.xlsm"). Sheets.Count) |
Забележете, че сме ги заменили 1 с Работни книги („Пример.xlsm“). Листове. Брой за да получите последния работен лист.
Копирайте работен лист в затворена работна книга
Може също да искате да копирате работен лист в затворена работна книга. Този код ще отвори затворена работна книга, така че да можете да копирате лист в нея.
123456789 | Sub CopySheetToClosedWB ()Application.ScreenUpdating = FalseЗадайте closedBook = Workbooks.Open ("D: \ Dropbox \ excel \ articles \ example.xlsm")Листове („Лист1“). Копиране преди: = затворена книга. Листове (1)closedBook.Close SaveChanges: = ИстинаApplication.ScreenUpdating = ВярноEnd Sub |
Копирайте лист от друга работна книга, без да я отваряте
Обратно, този код ще копира работен лист ОТ затворена работна книга, без да е необходимо ръчно да отваряте работната книга.
123456789 | Sub CopySheetFromClosedWB ()Application.ScreenUpdating = FalseЗадайте closedBook = Workbooks.Open ("D: \ Dropbox \ excel \ articles \ example.xlsm")closedBook.Sheets ("Sheet1"). Копирай преди: = ThisWorkbook.Sheets (1)closedBook.Close SaveChanges: = FalseApplication.ScreenUpdating = ВярноEnd Sub |
Забележете, че и в двата примера деактивирахме ScreenUpdating, така че процесът да работи във фонов режим.
Дублиране на Excel лист няколко пъти
Можете също така да дублирате лист на Excel няколко пъти, като използвате цикъл.
1234567891011121314 | Sub CopySheetMultipleTimes ()Dim n като цяло числоDim i As IntegerНа грешка възобновяване следващоn = InputBox ("Колко копия искате да направите?")Ако n> 0 ТогаваЗа i = 1 To nActiveSheet.Copy After: = ActiveWorkbook.Sheets (Worksheets.Count)СледващияКрай АкоEnd Sub |