Išsaugoti kaip išlaikyti originalų atvirą - „Excel“ patarimai

Yra daug kartų per mėnesį, kai man reikia „Excel“ darbaknygės, kad galėčiau sukurti daugybę jos kopijų. Paprastai į loginę klaidą patekau atidarydamas * * darbaknygę ir pradedu rašyti kodą, kad galėtumėte peržiūrėti sąrašą ir naudoti failą, išsaugoti kaip, kad išsaugotumėte darbaknygės kopiją.

Čia yra schema:

Logikos klaida uždarius darbaknygę

Ar matote problemą aukščiau? Makrokomanda veikia „WorkbookA“. Kai išsaugosiu failą kaip RegionEast.xlsx ir uždarysiu RegionEast.xlsx, makrokomanda nustos veikti.

Dažniausiai esu giliai į pseudokodą, kol nematau problemos.

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

Jei būčiau pagalvojusi iš anksto, būčiau sukūrusi dviejų darbaknygių sprendimą. Įdėkite visas makrokomandas į „WorkbookA“. Įdėkite visus duomenis į „WorkbookB“. Turėkite „WorkbookA“ kelis kartus atidaryti „WorkbookB“, pakeisti duomenis, „SaveAs“, „Close“.

Šiek tiek sudėtingiau

Senstant ir linksmiau matau, kad turiu mažiau nuotaikos eiti šiek tiek komplikuotiau. Juolab, kad dauguma kodo dirba originalioje komandoje „SaveAs“.

Šiandienos straipsnis yra apie nuostabų „SaveAsCopy“ VBA metodą. Ši komanda paliks „WorkbookA“ atidarytą ir vadinama „WorkbookA“. Makrokomanda gali veikti toliau. Bet ji išrašys esamą darbaknygės būseną į naują uždarą darbaknygę, vadinamą „WorkbookB“.

Tai leidžia man grįžti prie pradinės schemos:

Paprastesnė logika, visa savarankiška

Tačiau atradau vieną „SaveAsCopy“ problemą. Kai darau „ThisWorkbook.SaveAs“, galiu pasirinkti, ar noriu išsaugoti kaip „XLSX“, ar „XLSM“. Jei man reikia, kad makrokomandos būtų prieinamos naujoje darbaknygėje, naudoju XLSM. Kitu atveju naudoju XLSX ir makrokomandos išnyks.

Deja, jei esate XLSM darbaknygėje, negalėsite sėkmingai .SaveAsCopy ir pakeiskite į XLSX. Kodas veiks. Bet gauta darbaknygė nebus atidaryta, nes „Excel“ aptiks neteisingą failo tipo ir failo plėtinio atitikimą.

Mano sprendimas yra „SaveAsCopy“ kaip XLSM. Išsaugojęs kopiją, galiu atidaryti darbaknygę (sukurti dvi darbaknygės kopijas atmintyje) ir tada „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

Žiūrėti video

Vaizdo įrašo nuorašas

Sužinokite „Excel“ iš „Podcast“, 2213 serija: išsaugokite kaip naudodami VBA, bet laikykite originalą atvirą.

Ei, sveiki sugrįžę į internetinę transliaciją. Aš esu Billas Jelenas. Na, jūs galbūt pastebėjote, kad neseniai pasiūliau atsisiųsti kiekvieną tinklalaidę, nes daugelis žmonių manęs to prašė, todėl aš stengiausi padaryti gyvenimą kuo lengvesnį. Ir visas tikslas buvo išsaugoti kopiją, kurią galite atsisiųsti, bet aš nenorėjau, kad ten būtų papildomos medžiagos - žinokite, mano vidaus reikmėms skirtos medžiagos, todėl norėjau jų atsikratyti.

Ir, žinokit, tarkime, kad turėjau situaciją, kai turėjau parašyti 12 darbo knygelių, tiesa? Kiekvienas su skirtingu produktu. Taigi, aš pereisiu prie šių produktų ir parašysiu juos ten į A2, tada išsaugosiu darbaknygę ir galbūt išvalysiu kai kuriuos dalykus. Gerai. Taigi mano pirmasis praėjimas čia yra toks makrokomandas, gerai? Taigi, mes apibrėžiame dabartinę darbaknygę - darbalapiai („Duomenys“, Darbalapiai („Ataskaita“), kad juos rastume. paskutinę eilutę, nukopijuokite produktą iš duomenų darbaknygės į ataskaitos darbaknygę.

Gerai, ir dabar aš čia pateksiu į bėdą. Taigi naujoji darbaknygė vadinsis „C: aaa “, tada „Apple.xlsx“, ir aš einu į „Save As a“, žinote, su „Apple.xlsx“ ir pakeisti į XML - atidarykite xml darbaknygę- - kuri išims makrokomandas. Gerai. Bet dabar norėčiau uždaryti tą darbaknygę, bet, deja, kai jūs darote „Išsaugoti kaip“ - žr. Dabar, aš esu „Podcast 2013“ - kai po to kodo punkto atlieku išsaugojimą kaip, aš ilgiau bus „Podcast 2013“; Aš būsiu „Apple.xlsx“. Gerai? Taigi, jei noriu pradėti trinti medžiagą, tai ištrinsiu iš kopijos, bet uždarius kopiją, negaliu grįžti prie originalaus failo. Gerai? Ir ši makrokomanda - iš tikrųjų mano galva netrukus sprogs bandydama išsiaiškinti, ar kilpa vis tiek veiks, ar neveikia,tiesa? Taigi manau, kad „Save As“ yra neteisingas būdas eiti čia.

Na, tiesą sakant, laikykitės. Mes galėtume eiti dviem būdais: Pirma, aš galėčiau turėti kitą darbaknygę, kuri atidaro „Podcast 2213“, atlieka reikalingus dalykus ir tada išsaugo kaip su nauju pavadinimu, arba eisiu šiuo keliu, gerai, ir tai yra metodas, kurį baigiau naudodami - gerai, mes apibrėžsime šią darbaknygę, bet tada ir naują darbaknygę. Teisingai. Čia viskas yra vienodai, kol pasieksime tašką, kuriame ketinau daryti WBT. „SaveAs“. Patikrinkite tai: „SaveCopyAs“ - dabar to nėra, kiek galiu pasakyti, įprastoje „Excel“ … tai tik VBA. „SaveCopyAs“ sako: „Ei, žiūrėk, mes esame faile, vadinamame 2213, ir noriu, kad paimtumėte tą failą 2213 dabartine būsena ir išsaugotumėte jį diske ir uždarytumėte“. Laikykite pradinį failą atidarytą - 2213 lieka atidarytas, bet dabar diske turime visiškai naują failą pavadinimu Apple.xlsm. Tiesą sakant, iš pradžių ašm tiesiog pavadinsiu tai DeleteMe.xlsm. Gerai. Bet tai sukuria identišką kopiją ir palaiko pradinį failą - failą, kuriame veikia makrokomanda -, ir tai yra svarbi dalis, tiesa? Taigi dabar, kai turiu „DeleteMe“, atidarau jį, priskiriu WBN, atlieku tai, ką man reikia padaryti, atsikratyti visų papildomų lapų - žinau, ką turiu. Atkreipkite dėmesį, kad prieš ištrindami lapus norite padaryti „DisplayAlerts = False“, kitaip jūsų vis klausiama: „Ei, jūs negausite atgauti lapo“. Supratau. Ir tada, pagaliau, pasirinkite pirmąjį darbalapį, kurį FN bus „Apple.xlsx“, ir tada mes galime padaryti WBN. „SaveAs“ kaip „Open“, kaip „Open XMLWorkbook“. Jokių makrokomandų. Tada uždaryti - gražus dalykas, susijęs su „Uždaryti“, vėl grįžau į šią darbaknygę, 2213 m.Bet tai sukuria identišką kopiją ir palaiko pradinį failą - failą, kuriame veikia makrokomanda -, ir tai yra svarbi dalis, tiesa? Taigi dabar, kai turiu „DeleteMe“, atidarau jį, priskiriu WBN, atlieku tai, ką man reikia padaryti, atsikratyti visų papildomų lapų - žinau, ką turiu. Atkreipkite dėmesį, kad prieš ištrindami lapus norite padaryti „DisplayAlerts = False“, kitaip jūsų vis klausiama: „Ei, jūs negausite atgauti lapo“. Supratau. Ir tada, pagaliau, pasirinkite pirmąjį darbalapį, kurį FN bus „Apple.xlsx“, tada mes galime padaryti WBN. „Save“ Kaip „Apple“, kaip „Open XMLWorkbook“. Jokių makrokomandų. Tada uždaryti - gražus dalykas, susijęs su „Uždaryti“, grįžau į šią darbaknygę, 2213 m.Bet tai sukuria identišką kopiją ir palaiko pradinį failą - failą, kuriame veikia makrokomanda -, ir tai yra svarbi dalis, tiesa? Taigi dabar, kai turiu „DeleteMe“, atidarau jį, priskiriu WBN, atlieku tai, ką man reikia padaryti, atsikratyti visų papildomų lapų - žinau, ką turiu. Atkreipkite dėmesį, kad prieš ištrindami lapus norite padaryti „DisplayAlerts = False“, kitaip jūsų vis klausiama: „Ei, jūs negausite atgauti lapo“. Supratau. Ir tada, pagaliau, pasirinkite pirmąjį darbalapį, kurį FN bus „Apple.xlsx“, tada mes galime padaryti WBN. „Save“ Kaip „Apple“, kaip „Open XMLWorkbook“. Jokių makrokomandų. Tada uždaryti - gražus dalykas, susijęs su „Uždaryti“, vėl grįžau į šią darbaknygę, 2213 m.tiesa? Taigi dabar, kai turiu „DeleteMe“, atidarau jį, priskiriu WBN, atlieku tai, ką man reikia padaryti, atsikratyti visų papildomų lapų - žinau, ką turiu. Atkreipkite dėmesį, kad prieš ištrindami lapus norite padaryti „DisplayAlerts = False“, kitaip jūsų vis klausiama: „Ei, jūs negausite atgauti lapo“. Supratau. Ir tada, pagaliau, pasirinkite pirmąjį darbalapį, kurį FN bus „Apple.xlsx“, tada mes galime padaryti WBN. „Save“ Kaip „Apple“, kaip „Open XMLWorkbook“. Jokių makrokomandų. Tada uždaryti - gražus dalykas, susijęs su „Uždaryti“, vėl grįžau į šią darbaknygę, 2213 m.tiesa? Taigi dabar, kai turiu „DeleteMe“, atidarau jį, priskiriu WBN, atlieku tai, ką man reikia padaryti, atsikratyti visų papildomų lapų - žinau, ką turiu. Atkreipkite dėmesį, kad prieš ištrindami lapus norite padaryti „DisplayAlerts = False“, kitaip jūsų vis klausiama: „Ei, jūs negausite atgauti lapo“. Supratau. Ir tada, pagaliau, pasirinkite pirmąjį darbalapį, kurį FN bus „Apple.xlsx“, ir tada mes galime padaryti WBN. „SaveAs“ kaip „Open“, kaip „Open XMLWorkbook“. Jokių makrokomandų. Tada uždaryti - gražus dalykas, susijęs su „Uždaryti“, vėl grįžau į šią darbaknygę, 2213 m.Aš neketinu susigrąžinti lapo. "Aš jį suprantu. Ir tada, pagaliau, čia pasirinkite pirmąjį darbalapį. FN bus Apple.xlsx, tada mes galime padaryti WBN.SaveAs kaip„ Apple “kaip„ Open XMLWorkbook “. Nėra makrokomandų. . Ir tada Uždaryti - gražus dalykas, susijęs su „Uždaryti“, grįžau į šią darbaknygę, 2213 m.Aš neketinu susigrąžinti lapo. "Aš jį suprantu. Ir tada, pagaliau, čia pasirinkite pirmąjį darbalapį. FN bus Apple.xlsx, tada mes galime padaryti WBN.SaveAs kaip„ Apple “kaip„ Open XMLWorkbook “. Nėra makrokomandų. . Ir tada Uždaryti - gražus dalykas, susijęs su „Uždaryti“, grįžau į šią darbaknygę, 2213 m.

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.

Šiandienos užbaigimas: norite, kad VBA parašytų kelias dabartinės darbaknygės kopijas; Išsaugoti kaip sukelia problemų, nes pradinė darbaknygė nebėra atidaryta; vietoj to naudojate .SaveAsCopy, kad išsaugotumėte darbaknygės kopiją. Jei norite atsisiųsti darbaknygę iš šiandienos vaizdo įrašo, įskaitant makrokomandą, apsilankykite „YouTube“ apraše esančiame URL.

Noriu, kad užsukote, pamatysime kitą kartą kitam internetiniam pranešimui iš.

Atsisiųskite „Excel“ failą

Norėdami atsisiųsti „Excel“ failą: Save-as-Keep-Original-Open.xlsm

„Excel“ dienos mintis

Aš paprašiau savo „Excel Master“ draugų patarimo apie „Excel“. Šiandienos mintis apmąstyti:

- Datos yra skaičiai, o ne žodžiai.

Duane'as Aubinas

Įdomios straipsniai...