Saglabāt kā saglabāt oriģinālu atvērtu - Excel padomi

Satura rādītājs

Mēnesī ir daudzas reizes, kad man ir nepieciešama Excel darbgrāmata, lai izveidotu daudzas pašas kopijas. Parasti nokļuvu loģikas kļūdā, atverot * darbgrāmatu *, un es sāku rakstīt kodu, lai pārskatītu sarakstu, un izmantoju File, Save As, lai saglabātu darbgrāmatas kopiju.

Šeit ir blokshēma:

Loģikas kļūda, aizverot darbgrāmatu

Vai jūs redzat problēmu iepriekš? Makro darbojas darbgrāmatāA. Kad es Saglabāju kā failu kā RegionEast.xlsx un pēc tam aizveru RegionEast.xlsx, makro vairs nedarbosies.

Es parasti esmu dziļi pseidokodā, pirms redzu problēmu.

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

Ja es būtu domājis uz priekšu, es būtu izveidojis divu darba burtnīcu risinājumu. Ievietojiet visus makro WorkbookA. Ievietojiet visus datus darbgrāmatāB. Ļaujiet WorkbookA atkārtoti atvērt WorkbookB, mainīt datus, SaveAs, Close.

Nedaudz sarežģītāk

Kļūstot vecākam un kaprīzākam, es uzskatu, ka man ir mazāk noskaņojuma iet nedaudz sarežģītāk. Jo īpaši tāpēc, ka lielākā daļa koda strādā pie sākotnējās komandas SaveAs.

Šodienas raksts ir par lielisko VBA metodi SaveAsCopy. Šī komanda saglabās WorkbookA atvērtu un sauktu WorkbookA. Makro var turpināt darboties. Bet tas rakstīs darbgrāmatas pašreizējo stāvokli uz jaunu slēgtu darbgrāmatu ar nosaukumu WorkbookB.

Tas ļauj man atgriezties pie sākotnējās plūsmas diagrammas:

Vienkāršāka loģika, viss pašpietiekams

Tomēr es atklāju vienu problēmu ar SaveAsCopy. Kad es daru ThisWorkbook.SaveAs, es varu izvēlēties, vai vēlaties saglabāt kā XLSX vai XLSM. Ja man ir nepieciešams, lai makro būtu pieejami jaunajā darbgrāmatā, es izmantoju XLSM. Pretējā gadījumā es izmantoju XLSX, un makro pazudīs.

Diemžēl, ja esat XLSM darbgrāmatā, jūs nevarat veiksmīgi .SaveAsCopy un nomainiet uz XLSX. Kods darbosies. Bet iegūtā darbgrāmata netiks atvērta, jo Excel konstatē neatbilstību starp faila tipu un faila paplašinājumu.

Mans risinājums ir SaveAsCopy kā XLSM. Kad kopija ir saglabāta, es varu atvērt darbgrāmatu (izveidojot divas darbgrāmatas kopijas atmiņā) un pēc tam SaveAs XLSX.

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

Skatīties video

Video atšifrējums

Uzziniet programmu Excel no Podcast, 2213. sērija: Saglabājiet kā izmantojot VBA, bet saglabājiet oriģinālu atvērtu.

Sveiki, sveicināti atkal netcast. Es esmu Bils Jelens. Nu, jūs, iespējams, pamanījāt, ka es nesen piedāvāju lejupielādēt katru aplādi, jo daudzi cilvēki man to lūdza, un tāpēc es centos padarīt dzīvi pēc iespējas vieglāku. Un viss mērķis bija saglabāt kopiju, kuru varat lejupielādēt, taču es nevēlējos, lai tur būtu papildu lietas - ziniet, tās lietas, kas ir paredzētas manas pašas iekšējai lietošanai, tāpēc es gribēju no tās atbrīvoties.

Un, ziniet, pieņemsim, ka man bija situācija, kad man bija jāraksta 12 darba burtnīcas, vai ne? Katram no tiem ir atšķirīgs produkts. Tātad, es gatavojos iepazīties ar šiem produktiem un ierakstīt to tur A2, pēc tam saglabāt darbgrāmatu un, iespējams, iztīrīt dažas lietas. Labi. Tātad, mans pirmais ceļš šeit ir šāds makro, labi? Tātad, mēs definējam pašreizējo darbgrāmatu - darblapas ("Dati", Darblapas ("Pārskats"), lai tās atrastu) un pēc tam noskaidrotu, cik daudz datu rindu mums šodien ir, mēs turpināsim virzīties no 2. rindas uz pēdējā rindā kopējiet produktu no datu darbgrāmatas pārskata darbgrāmatā.

Labi, un tagad šeit es nonākšu nepatikšanās. Tātad jauno darbgrāmatu sauc par "C: aaa " un pēc tam Apple.xlsx, un es eju uz Saglabāt kā, jūs zināt, ar Apple.xlsx, un nomainīt uz XML - atveriet xml darbgrāmatu- - kas noņems makro. Labi. Bet tagad es gribētu aizvērt šo darbgrāmatu, bet diemžēl, kad jūs veicat Saglabāt kā - skatiet tieši tagad, es atrodos 2013. gada Podcast aplikācijā - kad pēc šī koda punkta veicu Saglabāt kā, es neesmu ilgāk būs Podcast 2013; Es būšu Apple.xlsx. Labi? Tātad, tagad, ja es gribu sākt dzēst sīkumus, es tos dzēšu kopijā, bet, aizverot kopiju, es nevaru atgriezties pie sākotnējā faila. Labi? Un šis makro - patiesībā mana galva drīz uzsprāgs, mēģinot saprast, vai cilpa joprojām darbosies vai nedarbosies,pa labi? Tāpēc es domāju, ka Saglabāt kā ir nepareizs veids, kā iet šeit.

Nu, patiesībā, pakārt. Mēs varētu iet divus maršrutus: Pirmkārt, man varētu būt vēl viena darbgrāmata, kas atver Podcast 2213, veic lietas un pēc tam saglabā kā jauns nosaukums, vai arī es eju šo ceļu, labi, un šī ir metode, ar kuru es beidzu Izmantojot - labi, mēs definēsim šo darbgrāmatu, bet pēc tam arī jaunu darbgrāmatu. Pa labi. Un šeit viss ir tāds pats kā līdz brīdim, kad es gatavojos darīt WBT.SaveAs. Pārbaudiet to: SaveCopyAs - tagad, cik es varu pateikt, tas nepastāv parastajā Excel … tas ir tikai VBA. Kā saka SaveCopyAs: "Hei, paskatieties, ka mēs atrodamies failā ar nosaukumu 2213, un es vēlos, lai jūs paņemtu šo failu 2213 pašreizējā stāvoklī un saglabātu diskā un aizvērtu." Saglabājiet oriģinālo failu atvērtu - 2213 paliek atvērts - bet tagad mums diskā ir pavisam jauns fails ar nosaukumu Apple.xlsm. Patiesībā sākumā esEs to vienkārši dēvēšu par DeleteMe.xlsm. Labi. Bet tas izveido identisku kopiju un saglabā oriģinālo failu - failu, kurā darbojas makro - atvērtu, un tā ir svarīgā daļa, vai ne? Tagad, kad man ir DeleteMe, es to atveru, piešķiru WBN, daru man vajadzīgās darbības, atbrīvojos no visām papildu lapām - es zinu, kas man ir. Ievērojiet, ka pirms lapu izdzēšanas vēlaties veikt DisplayAlerts = False, pretējā gadījumā tā visu laiku jums jautā: "Hei, jūs neatgūsiet lapu." ES saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN. Saglabāt Kā Apple kā Open XMLWorkbook. Nav makro. Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.Bet tas izveido identisku kopiju un saglabā oriģinālo failu - failu, kurā darbojas makro, - atvērtu, un tā ir svarīgā daļa, vai ne? Tagad, kad man ir DeleteMe, es to atveru, piešķiru WBN, daru man vajadzīgās darbības, atbrīvojos no visām papildu lapām - es zinu, kas man ir. Ievērojiet, ka pirms lapu izdzēšanas vēlaties veikt DisplayAlerts = False, pretējā gadījumā tā visu laiku jums jautā: "Hei, jūs neatgūsiet lapu." ES saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN. Saglabāt Kā Apple kā Open XMLWorkbook. Nav makro. Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.Bet tas izveido identisku kopiju un saglabā oriģinālo failu - failu, kurā darbojas makro - atvērtu, un tā ir svarīgā daļa, vai ne? Tagad, kad man ir DeleteMe, es to atveru, piešķiru WBN, daru man vajadzīgās darbības, atbrīvojos no visām papildu lapām - es zinu, kas man ir. Ievērojiet, ka pirms lapu izdzēšanas vēlaties veikt DisplayAlerts = False, pretējā gadījumā tā visu laiku jums jautā: "Hei, jūs neatgūsiet lapu." ES saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN. Saglabāt Kā Apple kā Open XMLWorkbook. Nav makro. Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.pa labi? Tagad, kad man ir DeleteMe, es to atveru, piešķiru WBN, daru man vajadzīgās darbības, atbrīvojos no visām papildu lapām - es zinu, kas man ir. Ievērojiet, ka pirms lapu izdzēšanas vēlaties veikt DisplayAlerts = False, pretējā gadījumā tas jums visu laiku jautā: "Hei, jūs neatgūsiet lapu." ES saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN. Saglabāt Kā Apple kā Open XMLWorkbook. Nav makro. Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.pa labi? Tagad, kad man ir DeleteMe, es to atveru, piešķiru WBN, daru man vajadzīgās darbības, atbrīvojos no visām papildu lapām - es zinu, kas man ir. Ievērojiet, ka pirms lapu izdzēšanas vēlaties veikt DisplayAlerts = False, pretējā gadījumā tas jums visu laiku jautā: "Hei, jūs neatgūsiet lapu." ES saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN. Saglabāt Kā Apple kā Open XMLWorkbook. Nav makro. Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.es nesaņemšu lapu atpakaļ. "Es to saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN.SaveAs Apple kā Open XMLWorkbook. Nav makro . Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.es nesaņemšu lapu atpakaļ. "Es to saprotu. Un tad, visbeidzot, šeit atlasiet pirmo darblapu FN būs Apple.xlsx, un tad mēs varam darīt WBN.SaveAs Apple kā Open XMLWorkbook. Nav makro . Un tad Aizvērt - skaistā lieta par Aizvērt ir tā, ka tagad esmu atgriezusies šajā darbgrāmatā, 2213. gadā.

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.

Apkopošana no šodienas: jūs vēlaties, lai VBA uzraksta vairākas pašreizējās darbgrāmatas eksemplārus; Saglabāt kā rada problēmas, jo sākotnējā darbgrāmata vairs nav atvērta; tā vietā izmantojat .SaveAsCopy, lai saglabātu darbgrāmatas kopiju. Ja vēlaties lejupielādēt darbgrāmatu no šodienas videoklipa, ieskaitot makro, apmeklējiet vietni YouTube YouTube aprakstā.

Es gribu, lai jūs apstātos, es jūs redzēšu nākamreiz, lai saņemtu citu netcast no.

Lejupielādējiet Excel failu

Lai lejupielādētu Excel failu: Save-as-Keep-Original-Open.xlsm

Excel dienas doma

Esmu lūdzis saviem Excel Master draugiem padomu par Excel. Šodienas doma apdomāt:

"Datumi ir skaitļi, nevis vārdi."

Duāns Aubins

Interesanti raksti...