Сачувај као оригинално отворено - Екцел савети

Преглед садржаја

Много пута у месецу ми треба Екцел радна свеска да бих створио много својих копија. Обично упаднем у логичку грешку отварањем * радне свеске * и почнем да пишем код да бих се провукао кроз листу и користим Датотека, Сачувај као да сачувам копију радне свеске.

Ево дијаграма тока:

Логичка грешка када затворим радну свеску

Да ли видите проблем горе? Макро је покренут у ВоркбоокА. Када датотеку спремим као датотеку РегионЕаст.клск, а затим затворим РегионЕаст.клск, макро ће престати да се изводи.

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

Sub MakeCopies() Dim WBT As Workbook Dim WSD As Worksheet Dim WSR As Worksheet Set WBT = ThisWorkbook Set WSD = WBT.Worksheets("Data") Set WSR = WBT.Worksheets("Report") FinalRow = WSD.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To FinalRow ' Copy this product to WSR.B2 WSR.Cells(2, 1).Value = WSD.Cells(i, 1).Value ' Save this workbook with a new name NewFN = "C:aaa " & WSD.Cells(i, 1).Value & ".xlsx" ' Save As a file type without macros WBT.SaveAs Filename:=NewFN, FileFormat:=xlOpenXMLWorkbook ' Close the new workbook ' But that won't work because I need this workbook to stay open End Sub

Да сам размишљао унапред, створио бих решење за две радне свеске. Ставите све макронаредбе у ВоркбоокА. Ставите све податке у ВоркбоокБ. Нека ВоркбоокА више пута отвори ВоркбоокБ, промени податке, СавеАс, Цлосе.

Нешто компликованије

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

Данашњи чланак говори о сјајној ВБА методи за СавеАсЦопи. Ова наредба ће ВоркбоокА држати отвореним и звати ВоркбоокА. Макро може наставити да ради. Али исписаће тренутно стање радне свеске у нову затворену радну свеску која се зове ВоркбоокБ.

То ми омогућава да се вратим на оригинални дијаграм тока:

Једноставнија логика, сва самостална

Међутим, открио сам један проблем са СавеАсЦопи. Када радим ТхисВоркбоок.СавеАс, могу да изаберем да ли желим да сачувам као КСЛСКС или КСЛСМ. Ако треба да макронаредбе буду доступне у новој радној свесци, тада користим КСЛСМ. У супротном користим КСЛСКС и макрои ће нестати.

Нажалост, ако се налазите у КСЛСМ радној свесци, не можете успешно .СавеАсЦопи и променити у КСЛСКС. Код ће радити. Али резултирајућа радна свеска се неће отворити јер Екцел открива погрешно подударање између типа датотеке и наставка датотеке.

Моје решење је СавеАсЦопи као КСЛСМ. Када се копија сачува, могу да отворим радну свеску (креирајући две копије радне свеске у меморији), а затим СавеАс КСЛСКС.

Sub MakeCopies() Dim WBT As Workbook Dim WBN As Workbook Dim WSD As Worksheet Dim WSR As Worksheet Set WBT = ThisWorkbook Set WSD = WBT.Worksheets("Data") Set WSR = WBT.Worksheets("Report") FinalRow = WSD.Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To FinalRow ' Copy this product to WSR.B2 WSR.Cells(2, 1).Value = WSD.Cells(i, 1).Value ' Save this workbook with a new name FN = "C:aaa " & WSD.Cells(i, 1).Value & ".xlsx" ' Save a Temp Copy of this workbook NewFN = "C:aaaDeleteMe.xlsm" ' Delete any previous copy left over from before On Error Resume Next Kill (NewFN) On Error GoTo 0 ' **************************************** ' Use SaveCopyAs instead of SaveAs WBT.SaveCopyAs Filename:=NewFN ' Open the workbook we just saved Set WBN = Workbooks.Open(NewFN) ' Delete the worksheets that we don't need Application.DisplayAlerts = False For Each WS In WBN.Worksheets Select Case WS.Name Case "BuyTheBook", "Info", "Form", "Template", "Article", "NotesForApp", "Data" WS.Delete End Select Next WS Application.DisplayAlerts = True NewFN = FN WBN.Worksheets(1).Select On Error Resume Next Kill (NewFN) On Error GoTo 0 Application.DisplayAlerts = False WBN.SaveAs NewFN, FileFormat:=xlOpenXMLWorkbook Application.DisplayAlerts = True WBN.Close False ' Delete the temporary copy NewFN = "C:aaaDeleteMe.xlsm" On Error Resume Next Kill (NewFN) On Error GoTo 0 End Sub

Погледајте видео

Видео транскрипт

Научите Екцел из Подцаста, епизода 2213: Сачувајте као користећи ВБА, али нека оригинал остане отворен.

Хеј, добродошао назад на нетцаст. Ја сам Билл Јелен. Па, можда сте приметили да у последње време нудим преузимање сваког подцаста, јер ме много људи то тражи, па сам покушавао да живот учиним што лакшим. И цео циљ је био да сачувам копију коју можете да преузмете, али нисам желео додатне ствари-- знате, ствари које су за моју унутрашњу употребу-- тамо, па сам желео да се тога решим.

И, знате, рецимо да сам имао ситуацију да сам морао да напишем 12 радних свесака, зар не? Свака са другачијим производом. Дакле, провући ћу се кроз ове производе и забележити их тамо у А2, а затим сачувати радну свеску и можда почистити неке ствари. У реду. Дакле, мој први пролазак овде је овакав макро, у реду? Дакле, дефинишемо тренутну радну свеску-- Радни листови („Подаци), Радни листови („ Извештај “) да бисмо их пронашли - и онда схватимо колико редова података данас имамо, кренут ћемо од реда 2 до у последњем реду копирајте производ из радне свеске података у радну свеску извештаја.

У реду, и ево овде ћу упасти у невољу. Дакле, нова радна свеска ће се звати „Ц: ааа “, а затим Аппле.клск, а ја ћу сачувати као, знате, са Аппле.клск, и променити у КСМЛ - отворити кмл радну свеску- - који ће уклонити макрое. У реду. Али сада бих желео да затворим ту радну свеску, али нажалост, када направите Саве Ас - видите одмах, налазим се у подцасту 2013 - када направим Саве Ас након те тачке у коду, нисам дуже ће бити у Подцаст 2013; Бићу у Аппле.клск. У реду? Дакле, ако желим да започнем са брисањем ствари, избрисаћу их у копији, али када затворим копију, не могу да се вратим на оригиналну датотеку. У реду? А овај макро … заправо, глава ће ми експлодирати покушавајући да схватим да ли ће петља и даље радити или неће радити,јел тако? Тако да мислим да је Саве Ас погрешан начин да се иде овде.

Па, заправо, сачекај. Могли бисмо ићи два пута: Прво, могао бих да добијем другу радну свеску која отвара Подцаст 2213, ради ствари, а затим Сачува Као и код новог имена, или ћу ићи овим путем, у реду, и ово је метода коју сам завршио користећи-- у реду, и ми ћемо дефинисати ову радну свеску, али затим и нову радну свеску. Јел тако. И овде је све некако исто док не дођемо до тачке у којој сам хтео да радим ВБТ.СавеАс. Погледајте ово: СавеЦопиАс-- ово сада, колико знам, не постоји у уобичајеном Екцелу … ово је само ВБА. СавеЦопиАс каже, "Хеј, види, налазимо се у датотеци која се зове 2213 и желим да узмете ту датотеку 2213 у тренутном стању и сачувате је на диску и затворите." Држите оригиналну датотеку отвореном - 2213 остаје отворено - али сада на диску имамо потпуно нову датотеку која се зове Аппле.клсм. Заправо, у почетку,назваћу га ДелетеМе.клсм. У реду. Али он ствара идентичну копију и задржава оригиналну датотеку - датотеку у којој је покренут макро - отвореном, и то је важан део, зар не? Дакле, сада када имам ДелетеМе тамо, отворим га, доделим ВБН-у, урадим ствари које морам да урадим, ослободим се свих додатних листова-- Знам шта имам. Приметите, пре него што избришете листове, желите да урадите ДисплаиАлертс = Фалсе, у супротном вас непрестано пита: "Хеј, нећеш вратити лист." Схватам. А онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛВоркбоок. Без макронаредби. А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.Али он ствара идентичну копију и задржава оригиналну датотеку - датотеку у којој је покренут макро - отвореном, и то је важан део, зар не? Дакле, сада када имам ДелетеМе тамо, отворим га, доделим ВБН-у, урадим ствари које морам да урадим, ослободим се свих додатних листова-- Знам шта имам. Приметите, пре него што избришете листове, желите да урадите ДисплаиАлертс = Фалсе, у супротном вас непрестано пита: "Хеј, нећеш вратити лист." Схватам. А онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛВоркбоок. Без макронаредби. А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.Али он ствара идентичну копију и задржава оригиналну датотеку - датотеку у којој је покренут макро - отвореном, и то је важан део, зар не? Дакле, сада када имам ДелетеМе тамо, отворим га, доделим ВБН-у, урадим ствари које морам да урадим, ослободим се свих додатних листова-- Знам шта имам. Приметите, пре него што избришете листове, желите да урадите ДисплаиАлертс = Фалсе, у супротном вас непрестано пита: "Хеј, нећеш вратити лист." Схватам. А онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛВоркбоок. Без макронаредби. А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.јел тако? Дакле, сада када имам ДелетеМе тамо, отворим га, доделим ВБН-у, урадим ствари које морам да урадим, ослободим се свих додатних листова-- Знам шта имам. Приметите, пре него што избришете листове, желите да урадите ДисплаиАлертс = Фалсе, у супротном вас непрестано пита: "Хеј, нећеш вратити лист." Схватам. А онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛВоркбоок. Без макронаредби. А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.јел тако? Дакле, сада када имам ДелетеМе тамо, отворим га, доделим ВБН-у, урадим ствари које морам да урадим, ослободим се свих додатних листова-- Знам шта имам. Приметите, пре него што избришете листове, желите да урадите ДисплаиАлертс = Фалсе, у супротном вас непрестано пита: "Хеј, нећеш вратити лист." Схватам. А онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛВоркбоок. Без макронаредби. А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.нећете добити назад лист. "Схватио сам. И онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛ радну књигу. Без макронаредби А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.нећете добити назад лист. "Схватио сам. А онда, коначно овде, изаберите први радни лист ФН који ће бити Аппле.клск, а затим можемо да радимо ВБН.СавеАс Аппле, као отворену КСМЛ радну књигу. Без макронаредби А онда Цлосе-- најлепша ствар Цлосеа је што сам се вратио у ову радну свеску, 2213.

Alright, it's been working really, really well, and the key to this whole thing is SaveCopyAs-- SaveCopyAs. So, to me-- well that's been around for a long time-- I never used it, and now I realize there's probably been a lot of times in the past where I should have used it. And maybe, you know, you should be using it or consider using it as well.

Okay, I forgot to mention one thing: the important thing is, with Save As Copy-- Save As Copy-- so when I do the Save As Copy, if I try to change to an xslx file type, I cannot change the file type here just by changing the extension in NewFN and when trying to open that subsequent workbook, they'll detect that it has macros, and it has the wrong extension, and it will yell at you. Right? So, you have to save it as xlsm and then later come back, reopen it, and save it as xlsx. But that all works with this macro.

So, hey, when I'm updating this book, Excel 2016, this summer, for Excel 2019, I'll make sure to include this tip. I think it's a useful tip to SaveCopyAs.

Крај од данас: Желите да ВБА напише неколико примерака тренутне радне свеске; Саве Ас изазива проблеме јер оригинална радна свеска више није отворена; уместо тога користите .СавеАсЦопи да бисте сачували копију радне свеске. Ако желите да преузмете радну свеску из данашњег видео записа, укључујући макро, посетите УРЛ у ИоуТубе опису.

Желим да свратите, видимо се следећи пут за још један пренос од.

Преузмите Екцел датотеку

Да бисте преузели екцел датотеку: саве-ас-кееп-оригинал-опен.клсм

Екцел мисао дана

Питао сам своје пријатеље из програма Екцел Мастер за савет о програму Екцел. Данашња мисао за размишљање:

„Датуми су бројеви, а не речи.“

Дуане Аубин

Занимљиви Чланци...