Kaip dubliuoti "Excel" lapą naudojant VBA

  • Pasidalinti
Michael Brown

Vadovėlyje pateikiamas makrokomandų rinkinys, skirtas "Excel" lapams dubliuoti: kopijuoti ir pervadinti pagal langelio vertę, kopijuoti kelis lapus, kopijuoti aktyvų darbalapį į kitą failą jo neatidarant ir dar daugiau.

Rankiniu būdu kopijuoti lapus "Excel" programoje yra gana greita ir paprasta... jei tai atliekama tik vieną ar du kartus. Daugkartinis kelių lapų kopijavimas yra nuobodus ir užima daug laiko. Šiame puslapyje rasite keletą naudingų makrokomandų šiai užduočiai automatizuoti.

    "Excel" VBA kopijuoti lapą į naują sąsiuvinį

    Šis paprasčiausias vienos eilutės makrokomandas atlieka būtent tai, ką rodo jo pavadinimas - nukopijuoja aktyvųjį lapą į naują sąsiuvinį.

    Public Sub CopySheetToNewWorkbook() activeSheet.Copy End Sub

    Kelių "Excel" lapų kopijavimas naudojant VBA

    Jei norite nukopijuoti kelis aktyvaus sąsiuvinio lapus į naują sąsiuvinį, pasirinkite visus dominančius lapus ir paleiskite šį makrokomandą:

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

    "Excel" VBA kopijuoti lapą į kitą sąsiuvinį

    Priklausomai nuo to, kur norite įterpti nukopijuotą lapą, naudokite vieną iš šių makrokomandų.

    Lapo kopijavimas į kito sąsiuvinio pradžią

    Šis makrokomandas nukopijuoja aktyvųjį lapą prieš visus kitus darbalapius paskirties faile, 1 knyga šiame pavyzdyje. Norėdami kopijuoti į kitą failą, pakeiskite "Book1.xlsx" pilnu tikslinio sąsiuvinio pavadinimu.

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

    Lapo kopijavimas į kito sąsiuvinio pabaigą

    Ši kodo dalis dubliuoja aktyvųjį darbalapį ir perkelia kopiją į 1 knyga Vėlgi nepamirškite pakeisti "Book1.xlsx" paskirties sąsiuvinio pavadinimu.

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

    Pastaba. Kad makrokomandos veiktų, tikslinis sąsiuvinis turi būti išsaugotas kietajame diske arba tinkle.

    Lapo kopijavimas į pasirinktą sąsiuvinį

    Norėdami nukopijuoti esamą lapą į bet kurį atidarytą sąsiuvinį, galite sukurti naudotojo formą (pavadintą Naudotojo forma1 ) su ListBox kontrolė ( pavadintas ListBox1 ) ir du mygtukai:

    Tada dukart spustelėkite formą ir kodo lange įklijuokite toliau pateiktą kodą:

    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 EndSub

    Įdiegę "UserForm", galite naudoti vieną iš toliau nurodytų makrokomandų, kad nukopijuotumėte aktyvųjį lapą į pasirinktą sąsiuvinį.

    Kopijuokite lapą į pasirinktos darbo knygos pradžia :

    Public Sub CopySheetToBeginningAnotherWorkbook() Įkelti UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Iškrauti UserForm1 End Sub

    Kopijuokite lapą į pasirinktos darbo knygos pabaiga :

    Public Sub CopySheetToEndAnotherWorkbook() Įkelti UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Iškrauti UserForm1 End Sub

    Paleidus makrokomandą "Excel", bus parodytas visų šiuo metu atidarytų sąsiuvinių sąrašas. Pasirenkate reikiamą sąsiuvinį ir spustelite OK:

    "Excel" makrokomandos kopijuoti lapą ir pervadinti

    Kai "Excel" programoje kopijuojate lapą, kopijai suteikiamas numatytojo formato pavadinimas, pvz. 1 lapas (2) . Toliau pateiktos makrokomandos gali padėti išvengti rūpesčių, susijusių su numatytojo pavadinimo keitimu rankiniu būdu.

    Šis kodas dubliuoja aktyvųjį darbalapį, pavadina kopiją "Bandomasis lapas" (galite jį pakeisti bet kokiu kitu norimu pavadinimu) ir nukopijuotą lapą patalpina dabartinio sąsiuvinio pabaigoje.

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

    Kad naudotojas galėtų nurodyti nukopijuoto lapo pavadinimą , naudokite šį kodą:

    Public Sub CopySheetAndRename() Dim newName As String On Error Resume Next newName = InputBox( "Įveskite nukopijuoto darbalapio pavadinimą" ) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub End Sub

    Paleidus makrokomandą, rodomas šis įvesties langas, į kurį įveskite norimą pavadinimą ir paspauskite OK:

    "Excel" makrokomandos kopijuoti lapą ir pervadinti pagal ląstelės vertę

    Kai kuriose situacijose gali būti patogiau kopiją pavadinti konkrečios ląstelės, pavyzdžiui, stulpelio antraštės, verte. Šiuo atveju paprasčiausiai pasinaudokite pirmiau pateiktu kodu ir nurodykite reikšmę šiuo metu pasirinkta ląstelė į įvesties lauką automatiškai. Kaip ir ankstesniame pavyzdyje, kopija bus patalpinta aktyviojo sąsiuvinio pabaigoje.

    Sudėtingiausia būtų užtikrinti, kad prieš paleisdami makrokomandą naudotojai visada pasirinktų tinkamą ląstelę :)

    Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox("Įveskite nukopijuoto darbo lapo pavadinimą" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End Sub

    Taip pat galite kietasis kodas ląstelės adresą pagal kurią kopija turėtų būti pavadinta, toliau pateiktame kode - ląstelė A1. Norėdami pavadinti nukopijuotą darbalapį pagal kitą ląstelę, pakeiskite A1 tinkama ląstelės nuoroda.

    Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet 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

    Makrokomanda, skirta darbalapiui kopijuoti į uždarytą sąsiuvinį

    Šis makrokomandas nukopijuoja aktyvųjį lapą į uždaryto sąsiuvinio pabaigą. Kito sąsiuvinio pavadinimas kode nenurodomas - makrokomandas atidaro standartinį "Windows Explorer" langą ir leidžia pasirinkti bet kurį paskirties failą:

    Pasirinkę failą ir spustelėję Atviras , makrokomanda nukopijuos aktyvųjį lapą ir automatiškai uždarys tikslinį sąsiuvinį.

    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)Uždaryti ( True ) Application.ScreenUpdating = True End If End Sub

    "Excel VBA" kopijuoti lapą iš kitos darbo knygos neatidarant

    Šis makrokomandas leidžia nukopijuoti darbalapį iš kito "Excel" failo jo neatidarant. Nukopijuotas lapas bus įterptas dabartinio sąsiuvinio pabaigoje.

    Tik nepamirškite atlikti kelių pakeitimų kode:

    • C:\Users\XXX\Documents\Target_Book.xlsx turėtų būti pakeistas į tikrąjį sąsiuvinio, iš kurio norite nukopijuoti lapą, kelią ir pavadinimą.
    • Lapas1 turėtų būti pakeistas norimo kopijuoti lapo pavadinimu.
    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, kad kelis kartus dubliuotumėte lapą

    Kartais gali prireikti tą patį lapą dubliuoti daugiau nei vieną kartą, pavyzdžiui, norint išbandyti skirtingas formules tam pačiam duomenų rinkiniui. Tai galima lengvai padaryti naudojant toliau pateiktą makrokomandą.

    Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox ("Kiek aktyvaus lapo kopijų norite padaryti?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End Sub

    Atidarykite originalų lapą, paleiskite makrokomandą, nurodykite, kiek aktyvaus lapo kopijų norite padaryti, ir spustelėkite GERAI :

    Kaip dubliuoti "Excel" lapus naudojant VBA

    Norėdami nukopijuoti "Excel" lapą su viena iš pirmiau pateiktų makrokomandų, galite įterpti VBA kodą į savo knygą arba paleisti makrokomandą iš mūsų pavyzdinės darbo knygos.

    Kaip į darbaknygę įtraukti makrokomandą

    Norėdami įterpti kodą į sąsiuvinį, atlikite šiuos veiksmus:

    1. Atidarykite darbalapį, kurį norite kopijuoti.
    2. Paspauskite Alt + F11, kad atidarytumėte Visual Basic redaktorių.
    3. Kairiajame lange dešiniuoju pelės klavišu spustelėkite Ši darbo knyga , tada spustelėkite Įdėkite > Modulis .
    4. Įklijuokite kodą į langą Kodas.
    5. Paspauskite F5, kad paleistumėte makrokomandą.

    Išsamias žingsnis po žingsnio instrukcijas rasite skyriuje Kaip įterpti VBA kodą į "Excel".

    Kaip paleisti makrokomandą iš mūsų pavyzdinio sąsiuvinio

    Taip pat galite atsisiųsti mūsų pavyzdinį sąsiuvinį "Excel" lapų dubliavimas ir iš ten paleisti kodą.

    Pavyzdiniame sąsiuvinyje yra šios makrokomandos:

    CopySheetToNewWorkbook - nukopijuoja esamą darbalapį į naują sąsiuvinį.

    CopySelectedSheets - nukopijuoja kelis pasirinktus lapus į naują sąsiuvinį.

    CopySheetToBeginningAnotherWorkbook - nukopijuoja aktyvųjį lapą į kito sąsiuvinio pradžią.

    CopySheetToEndAnotherWorkbook - nukopijuoja aktyvųjį lapą į kito "Excel" failo pabaigą.

    CopySheetAndRename - dubliuoja dabartinį lapą, pervadina jį taip, kaip nurodė naudotojas, ir įdeda kopiją po visų kitų dabartinio sąsiuvinio lapų.

    CopySheetAndRenamePredefined - dubliuoja aktyvųjį lapą, suteikia kopijai užkoduotą pavadinimą ir patalpina ją dabartinio sąsiuvinio pabaigoje.

    CopySheetAndRenameByCell - sukuria aktyviojo lapo kopiją ir pervadina ją pagal pasirinktos ląstelės vertę.

    CopySheetAndRenameByCell2 - nukopijuoja aktyvųjį lapą ir pakeičia jo pavadinimą pagal užkoduotą ląstelės adresą.

    CopySheetToClosedWorkbook - leidžia kopijuoti lapą į uždarytą sąsiuvinį.

    CopySheetFromClosedWorkbook - galite nukopijuoti lapą iš kito "Excel" failo jo neatidarydami.

    DuplicateSheetMultipleTimes - galite kelis kartus dubliuoti "Excel" lapą.

    Norėdami paleisti makrokomandą "Excel" programoje, atlikite šiuos veiksmus:

    1. Atidarykite atsisiųstą sąsiuvinį ir, jei paprašyta, įgalinkite turinį.
    2. Atidarykite savo sąsiuvinį ir pereikite prie lapo, kurį norite kopijuoti.
    3. Darbalapyje paspauskite Alt + F8 , pasirinkite dominantį makrokomandą ir spustelėkite Paleisti .

    Štai kaip galite dubliuoti "Excel" lapą naudodami VBA. Dėkoju, kad perskaitėte, ir tikiuosi, kad kitą savaitę susitiksime mūsų tinklaraštyje!

    Michaelas Brownas yra atsidavęs technologijų entuziastas, mėgstantis supaprastinti sudėtingus procesus naudojant programinės įrangos įrankius. Turėdamas daugiau nei dešimtmetį patirtį technologijų pramonėje, jis patobulino savo įgūdžius „Microsoft Excel“ ir „Outlook“, taip pat „Google“ skaičiuoklėse ir dokumentuose. Michaelio tinklaraštis skirtas dalytis savo žiniomis ir patirtimi su kitais, jame pateikiami lengvai įgyvendinami patarimai ir vadovėliai, kaip pagerinti produktyvumą ir efektyvumą. Nesvarbu, ar esate patyręs profesionalas, ar pradedantysis, Michaelo tinklaraštyje rasite vertingų įžvalgų ir praktinių patarimų, kaip išnaudoti visas šių pagrindinių programinės įrangos įrankių galimybes.