Како дуплирати лист у Екцелу са ВБА

  • Деле Ово
Michael Brown

Водич пружа колекцију макроа за дуплирање листова у Екцел-у: копирајте и преименујте на основу вредности ћелије, копирајте више листова, копирајте активни радни лист у другу датотеку без отварања и још много тога.

Ручно копирање листова у Екцел-у је прилично брзо и једноставно... ако се изврши само једном или два пута. Умножавање више листова више пута је досадно и дуготрајно. На овој страници ћете пронаћи прегршт корисних макроа за аутоматизацију овог задатка.

    Екцел ВБА за копирање листа у нову радну свеску

    Овај најједноставнији макро у једном реду ради тачно оно што његово име сугерише - копира активни лист у нову радну свеску.

    Јавни под ЦопиСхеетТоНевВоркбоок() ацтивеСхеет.Цопи Енд Суб

    Копирај више листова у Екцел-у помоћу ВБА

    Ако желите да копирајте неколико листова из активне радне свеске у нову, изаберите све радне листове од интереса и покрените овај макро:

    Публиц Суб ЦопиСелецтедСхеетс() АцтивеВиндов.СелецтедСхеетс.Цопи Енд Суб

    Екцел ВБА за копирање листа у другу радну свеску

    У зависности од тога где желите да уметнете копирани лист, користите један од следећих макроа.

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

    Овај макро копира активни лист пре сви остали радни листови у одредишној датотеци, Књига1 у овом примеру. Да бисте копирали у другу датотеку, замените „Боок1.клск“ пуним именом ваше циљне радне свеске.

    Јавни подЦопиСхеетТоБегиннингАнотхерВоркбоок() ацтивеСхеет.Цопи Бефоре:=Воркбоокс( "Боок1.клск" ).Схеетс(1) Енд Суб

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

    Овај део кода дуплира активни радни лист и ставља копију на крај Боок1 . Опет, не заборавите да замените "Боок1.клск" именом ваше одредишне радне свеске.

    Публиц Суб ЦопиСхеетТоЕндАнотхерВоркбоок() ацтивеСхеет.Цопи Афтер:=Воркбоокс( "Боок1.клск" ).Схеетс(Воркбоокс( "Боок1.клск" " ).Ворксхеетс.Цоунт) Енд Суб

    Напомена. Да би макрои радили, циљна радна свеска мора бити сачувана на вашем чврстом диску или мрежи.

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

    Да бисте могли да копирате тренутни лист у било коју отворену радну свеску, можете креирати кориснички образац (назван УсерФорм1 ) са контролом ЛистБок ( назван ЛистБок1 ) и два дугмета:

    Следеће, двапут кликните на образац и налепите код испод у прозор кода:

    Публиц СелецтедВоркбоок Ас Стринг Привате Суб УсерФорм_Инитиализе() СелецтедВоркбоок = "" ЛистБок1.Цлеар Фор Евери вбк Ин Апплицатион.Воркбоокс ЛистБок1.АддИтем (вбк.Наме) Следећи крај Суб Привате Суб ЦоммандБуттон1_Цлицк() Ако ЛистБок1.ЛистИндек &гт; -1 Затим СелецтедВоркбоок = ЛистБок1.Лист(ЛистБок1.ЛистИндек) Енд Иф Ме.Хиде Енд Суб Привате Суб ЦоммандБуттон2_Цлицк() СелецтедВоркбоок = "" Ме.Хиде Енд Суб

    Са корисничким обрасцем на месту, можете користити једно од следећег макрои за копирањеактивни лист у радну свеску по вашем избору.

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

    Јавни под ЦопиСхеетТоБегиннингАнотхерВоркбоок() Учитај УсерФорм1 УсерФорм1.Схов Иф (УсерФорм1.СелецтедВоркбоок " " ) Затим ацтивеСхеет.Цопи Бефоре:=Воркбоокс(УсерФорм1.СелецтедВоркбоок).Схеетс(1) Енд Иф Унлоад УсерФорм1 Енд Суб

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

    Публиц Суб ЦопиСхеетТоЕндАнотхерВоркбоок() Учитавање УсерФорм1 УсерФорм1.Схов Иф (УсерФорм1.СелецтедВоркбоок "" ) Затим ацтивеСхеет.Цопи Афтер:=Воркбоокс( _ УсерФорм1.СелецтедВоркбоок).Схеетс( _ ВоркбооксСелецтед(УсертедФорм1)Форм.Форм.Усер.Форм.Усер. Енд Суб

    Када се покрене у Екцел-у, макро ће вам показати листу свих тренутно отворених радних књига. Изабрали сте потребну и кликните на ОК:

    Екцел макро за копирање листа и преименовање

    Када копирате лист у Екцел-у, реплика добија име у подразумеваном формату као што је Схеет1 (2) . Следећи макрои могу да вас поштеде муке да ручно промените подразумевано име.

    Овај код дуплира активни радни лист, именује копију као „Тест Схеет“ (слободно је да га замените било којим другим именом које желите) , и поставља копирани лист на крај тренутне радне свеске.

    Публиц Суб ЦопиСхеетАндРенамеПредефинед() ацтивеСхеет.Цопи Афтер:=Ворксхеетс(Схеетс.Цоунт) У случају грешке Настави Следећи ацтивеСхеет.Наме ="Тест Схеет" Енд Суб

    Да бисте омогућили кориснику да наведе име за копирани лист , користите овај код:

    Публиц Суб ЦопиСхеетАндРенаме() Дим невНаме као стринг при грешци Настави Нект невНаме = ИнпутБок( "Унесите име за копирани радни лист" ) Ако је невНаме "" Затим ацтивеСхеет.Цопи Афтер:=Ворксхеетс(Схеетс.Цоунт) При грешци Настави Следећи ацтивеСхеет.Наме = невНаме Енд Иф Енд Суб

    По покретању, макро приказује следећи оквир за унос, у који укуцате жељено име и притиснете ОК:

    Екцел макро за копирање листа и преименовање на основу вредности ћелије

    У у неким ситуацијама, можда би било згодније дати назив копији са одређеном вредношћу ћелије, на пример, заглављем колоне. За ово једноставно узмите горњи код и аутоматски унесете вредност тренутно изабране ћелије у поље за унос. Као и у претходном примеру, копија ће бити постављена на крај активне радне свеске.

    Најтежи део би био да ваши корисници увек изаберу тачну ћелију пре покретања тхе мацро :)

    Публиц Суб ЦопиСхеетАндРенамеБиЦелл() Дим невНаме као стринг при грешци Настави Нект невНаме = ИнпутБок( "Унесите име за копирани радни лист" , "Копирај радни лист" , АцтивеЦелл.Валуе) Ако је невНаме "" Затим ацтивеСхеет. Цопи Афтер:=Ворксхеетс(Схеетс.Цоунт) У случају грешке Настави Нект ацтивеСхеет.Наме = невНаме Енд Ако Енд Суб

    Алтернативно, можете тврдо кодирати адресућелија по којој копија треба да буде именована, ћелија А1 у коду испод. Да бисте дали назив копираном радном листу на основу друге ћелије, замените А1 одговарајућом референцом ћелије.

    Публиц Суб ЦопиСхеетАндРенамеБиЦелл2() Дим вкс Ас Ворксхеет Сет вкс = ацтивеСхеет ацтивеСхеет.Цопи Афтер:=Ворксхеетс(Схеетс.Цоунт) Иф вкс.Ранге ( "А1" ).Вредност "" Затим При грешци Настави Следећи ацтивеСхеет.Наме = вкс.Ранге( "А1" ).Валуе Енд Иф вкс.Ацтивате Енд Суб

    Макро за копирање радног листа у затворену радну свеску

    Овај макро копира активни лист на крај затворене радне свеске. Име друге радне свеске није наведено у коду – макро ће отворити стандардни прозор Виндовс Екплорер-а и омогућити вам да изаберете било коју одредишну датотеку:

    Након што изаберете датотеку и кликните на Отвори , макро ће копирати активни лист и аутоматски затворити циљну радну свеску.

    Публиц Суб ЦопиСхеетТоЦлоседВоркбоок() Дим филеНаме Дим цлосеБоок Ас Воркбоок Дим цуррентСхеет Ас Ворксхеет филеНаме = Апплицатион.ГетОпенФиленаме( "Екцел Датотеке (*.клск), *.клск" ) Ако је име датотеке Фалсе онда Апплицатион.СцреенУпдатинг = Фалсе Сет цуррентСхеет = Апплицатион.ацтивеСхеет Сет цлосеБоок = Воркбоокс. Отвори (име датотеке) цуррентСхеет.Цопи Афтер:=цлоседБоок.Схеетс(цлоседБоок.Ворксхеетс.Цоунт) цлосеБоок. Цлосе ( Труе ) Апплицатион.СцреенУпдатинг = Труе Енд Иф Енд Суб

    Екцел ВБА за копирање листа из друге радне свеске безотварање

    Овај макро вам омогућава да копирате радни лист из друге Екцел датотеке без отварања. Копирани лист ће бити уметнут на крај тренутне радне свеске.

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

    • Ц:\Усерс\КСКСКС\Доцументс\ Таргет_Боок.клск треба променити у стварну путању и име радне свеске из које желите да копирате лист.
    • Схеет1 треба заменити именом листа који желите да копирате.
    Публиц Суб ЦопиСхеетФромЦлоседВоркбоок() Дим изворна књига као апликација за радну свеску.СцреенУпдатинг = Фалсе Подесите изворну књигу = Радне свеске. Отвори ( "Ц:\Усерс\КСКСКС\Доцументс\Таргет_Боок.клск" ) соурцеБоок.Схеетс( "Схеет1" ).Цопи Афтер:=ТхисВоркбоок.Схеетс(ТхисВоркбоок.Схеетс.Цоунт) соурцеБоок. Затвори Апплицатион.СцреенУпдатинг = Труе Енд Суб

    Екцел ВБА за вишеструко дуплирање листа

    Понекад ћете можда морати да дуплирате исти лист више пута, на пример да бисте тестирали различите формуле на истом скупу података. Ово се лако може урадити помоћу следећег макроа.

    Публиц Суб ДуплицатеСхеетМултиплеТимес() Дим н Ас Интегер Он Еррор Ресуме Нект н = ИнпутБок( "Колико копија активног листа желите да направите?" ) Ако је н &гт; = 1 Тада За нумтимес = 1 До н ацтивеСхеет.Цопи Афтер:=АцтивеВоркбоок.Схеетс(Ворксхеетс.Цоунт) Нект Енд Иф Енд Суб

    Отворите оригинални лист, покрените макро, наведите колико копија активног листакоје желите да направите и кликните на ОК :

    Како да дуплирате листове у Екцел-у помоћу ВБА

    Да бисте копирали лист у Екцел-у помоћу једног од горе наведених макроа, можете или да убаците ВБА код у своју књигу или да покренете макро из наше радне свеске.

    Како додати макро у своју радну свеску

    Да бисте уметнули кода у радној свесци, извршите ове кораке:

    1. Отворите радни лист који желите да копирате.
    2. Притисните Алт + Ф11 да бисте отворили Висуал Басиц Едитор.
    3. Укључено левом окну, кликните десним тастером миша на Ова радна свеска , а затим кликните на Инсерт &гт; Модуле .
    4. Налепите код у прозор кода.
    5. Притисните Ф5 да бисте покренули макро.

    За детаљна упутства корак по корак погледајте Како уметнути ВБА код у Екцел.

    Како покренути макро из наше радне свеске

    Алтернативно, можете преузети нашу радну свеску у дупликате Екцел табеле и одатле покренути код.

    Пример радне свеске садржи следеће макрое:

    ЦопиСхеетТоНевВоркбоок - копира цу изнајми радни лист у нову радну свеску.

    ЦопиСелецтедСхеетс - копира више листова које изаберете у нову радну свеску.

    ЦопиСхеетТоБегиннингАнотхерВоркбоок - копира активни лист на почетак друге радне свеске.

    ЦопиСхеетТоЕндАнотхерВоркбоок - копира активни лист на крај друге Екцел датотеке.

    ЦопиСхеетАндРенаме - дуплира тренутни лист,преименује га како је одредио корисник и ставља копију иза свих осталих листова у тренутној радној свесци.

    ЦопиСхеетАндРенамеПредефинед - дуплира активни лист, даје тврдо кодирано име копији и поставља је на крају тренутне радне свеске.

    ЦопиСхеетАндРенамеБиЦелл - прави копију активног листа и преименује га на основу изабране вредности ћелије.

    ЦопиСхеетАндРенамеБиЦелл2 - копира активни лист и преименује га на основу чврсто кодиране адресе ћелије.

    ЦопиСхеетТоЦлоседВоркбоок - омогућава вам да копирате лист у затворену радну свеску.

    ЦопиСхеетФромЦлоседВоркбоок - омогућава вам да копирате лист из друге Екцел датотеке без отварања.

    ДуплицатеСхеетМултиплеТимес - омогућава вам да дуплирате лист у Екцел-у више пута.

    Да покрените макро у свом Екцел-у, само урадите следеће:

    1. Отворите преузету радну свеску и омогућите садржај ако се то од вас затражи.
    2. Отворите сопствену радну свеску и идите до листа који желите да копија.
    3. <1 7>У свом радном листу притисните Алт + Ф8 , изаберите макро који вас занима и кликните на Рун .

    Тако можете да дуплирате лист у Екцел-у са ВБА. Захваљујем вам на читању и надам се да се видимо на нашем блогу следеће недеље!

    Мајкл Браун је посвећен технолошки ентузијаста са страшћу за поједностављење сложених процеса помоћу софтверских алата. Са више од деценије искуства у технолошкој индустрији, усавршио је своје вештине у Мицрософт Екцел-у и Оутлоок-у, као и у Гоогле табеле и документима. Мајклов блог посвећен је дељењу свог знања и стручности са другима, пружајући једноставне савете и упутства за побољшање продуктивности и ефикасности. Без обзира да ли сте искусан професионалац или почетник, Мајклов блог нуди вредне увиде и практичне савете како да на најбољи начин искористите ове основне софтверске алате.