Salvesta kui originaali avatuna hoidmine - Exceli näpunäited

Lang L: none (table-of-contents)

Kuu jooksul on mitu korda vaja mul Exceli töövihikut, et temast palju koopiaid luua. Tavaliselt satun loogikavea juurde, avades töövihiku * * ja hakkan loendi kaudu tsükliks koodi kirjutama ning kasutan töövihiku koopia salvestamiseks File, Save As.

Siin on vooskeem:

Töövihiku sulgemisel loogikaviga

Kas näete probleemi ülal? Makro töötab töövihikus A. Kui salvestan faili nimega RegionEast.xlsx ja sulgen seejärel RegionEast.xlsx, peatub makro töötamine.

Enne probleemi nägemist olen tavaliselt pseudokoodis sügaval.

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

Oleksin ette mõelnud, oleksin loonud kahe töövihiku lahenduse. Pange kõik makrod töövihikusse A. Pange kõik andmed töövihikusB. Laske töövihikulA korduvalt avada töövihikB, muutke andmeid, salvestaAs, sulgege.

Veidi keerulisem

Vanemaks ja vaguramaks muutudes avastan, et mul on vähem tuju minna veidi keerulisemaks. Seda enam, et mul on suurem osa koodidest algse SaveAs-käsu jaoks töös.

Tänane artikkel räägib SaveAsCopy vinge VBA-meetodist. See käsk hoiab töövihiku A lahti ja seda nimetatakse töövihikuks A. Makro saab edasi töötada. Kuid see kirjutab töövihiku praeguse oleku välja uude suletud töövihikusse nimega WorkbookB.

See võimaldab mul minna tagasi algse vooskeemi juurde:

Lihtsam loogika, kõik iseseisev

Kuid avastasin ühe probleemi SaveAsCopy-ga. Kui ma teen ThisWorkbook.SaveAs, saan ma valida, kas soovin salvestada kui XLSX või XLSM. Kui mul on vaja, et makrod oleksid uues töövihikus saadaval, siis kasutan XLSM-i. Muidu kasutan XLSX-i ja makrod kaovad.

Kahjuks ei saa XLSM-i töövihikus olles edukalt .SaveAsCopy salvestada ja XLSX-i vahetada. Kood töötab. Kuid tulemuseks olev töövihik ei avane, kuna Excel tuvastab failitüübi ja faililaiendi vale sobitamise.

Minu lahendus on SaveAsCopy kui XLSM. Kui koopia on salvestatud, saan avada töövihiku (luues kaks töövihiku koopiat mällu) ja seejärel salvestada 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

Vaata videot

Video ärakiri

Õppige Exceli Podcastist, episood 2213: salvestage VBA-na, kuid hoidke originaali avatud.

Tere, tere tulemast tagasi netisaate juurde. Olen Bill Jelen. Noh, võite olla märganud, et olen pakkunud hiljuti iga taskuhäälingu allalaadimist, sest paljud inimesed on seda minult küsinud ja nii üritasin elu võimalikult lihtsaks muuta. Ja kogu eesmärk oli salvestada koopia, mille saate alla laadida, kuid ma ei tahtnud, et seal oleks lisavarustust - teate, minu enda sisekasutuseks mõeldud kraami -, nii et tahtsin sellest lahti saada.

Ja tead, ütleme nii, et mul oli olukord, kus ma pidin kirjutama 12 töövihikut, eks? Mõlemal on erinev toode. Niisiis uurin neid tooteid ja kirjutan selle sinna A2-sse ning salvestan siis töövihiku ja ehk koristan mõned asjad ära. Hästi. Nii et minu esimene läbipääs siit on selline makro, eks? Niisiis, määratleme praeguse töövihiku - töölehed ("Andmed", Töölehed ("Aruanne") nende leidmiseks - ja seejärel selgitame välja, mitu andmerida meil täna on, läheme 2. rea juurest silmusesse viimasele reale kopeerige toode andmete töövihikust aruande töövihikusse.

Hästi, ja nüüd olen siin, kus hakkan hätta jääma. Nii et uus töövihik hakkab kandma nime "C: aaa " ja siis Apple.xlsx. Ma lähen salvestama nimega Apple.xlsx ja vahetage XML-i - avage xml töövihik- - mis eemaldab makrod. Hästi. Aga nüüd tahaksin selle töövihiku sulgeda, kuid kahjuks, kui teete käsku Salvesta nimega - vaadake praegu, olen Podcast 2013-s - kui teen koodis pärast seda punkti Salvesta nimega, pole ma kauem on Podcast 2013; Ma lähen Apple.xlsx-i. Hästi? Nii et nüüd, kui ma tahan hakata asju kustutama, siis kustutan need ka koopias, kuid kui koopia sulgen, siis ma ei saa algse faili juurde tagasi tulla. Hästi? Ja see makro - tegelikult on mu pea plahvatamas ja üritan aru saada, kas silmus töötab või ei tööta,eks? Nii et ma arvan, et Salvesta nimega on vale viis siia minna.

Noh, tegelikult ootele. Võiksime minna kahel viisil: Esiteks võiksin omada veel üht töövihikut, mis avab Podcast 2213, teeb asju ja salvestab siis uue nimega või ma lähen niimoodi, olgu, ja see on meetod, mille ma lõpetasin kasutades-- olgu, ja määratleme selle töövihiku, aga siis ka uue töövihiku. Õige. Ja kõik on siin all samamoodi, kuni jõuame punkti, kus ma kavatsesin WBT-d teha. Salvesta. Vaadake seda: SaveCopyAs - nüüd pole seda nii palju, kui ma oskan öelda, tavalises Excelis … see on ainult VBA. SaveCopyAs ütleb: "Hei, vaata, me oleme failis nimega 2213 ja ma tahan, et võtaksite selle faili 2213 praeguses olekus, salvestaksite selle kettale ja sulgeksite." Hoidke originaalfail avatud - 2213 jääb avatuks - kuid nüüd on meil kettal uhiuus fail nimega Apple.xlsm. Tegelikult ma alguseshakkan seda lihtsalt nimetama DeleteMe.xlsm. Hästi. Kuid see loob identse koopia ja hoiab algse faili - faili, milles makro töötab - avatuna ja see on oluline osa, eks? Nüüd, kui mul on seal DeleteMe, avan selle, määran WBN-ile, teen asju, mida pean tegema, vabanen kõigist lisalehtedest - ma tean, mis mul on. Pange tähele, et enne lehtede kustutamist soovite teha DisplayAlerts = False, vastasel juhul küsitakse teilt pidevalt: "Hei, te ei saa lehte tagasi." Saan aru. Ja siis, lõpuks siin, valige esimene tööleht, millest FN saab olema Apple.xlsx, ja siis saame teha WBN-i. Salvesta Apple'ina avatud XML-i töövihikuna. Makrosid pole. Ja siis Sule - Sulge ilus asi on see, et olen nüüd selles töövihikus, 2213, tagasi.Kuid see loob identse koopia ja hoiab algse faili - faili, milles makro töötab - avatuna ja see on oluline osa, eks? Nüüd, kui mul on seal DeleteMe, avan selle, määran WBN-ile, teen asju, mida pean tegema, vabanen kõigist lisalehtedest - ma tean, mis mul on. Pange tähele, et enne lehtede kustutamist soovite teha DisplayAlerts = False, vastasel juhul küsitakse teilt pidevalt: "Hei, te ei saa lehte tagasi." Saan aru. Ja siis, lõpuks siin, valige esimene tööleht, millest FN saab olema Apple.xlsx, ja siis saame teha WBN-i. Salvesta Apple'ina avatud XML-i töövihikuna. Makrosid pole. Ja siis Sule - Sulge ilus asi on see, et olen nüüd selles töövihikus, 2213, tagasi.Kuid see loob identse koopia ja hoiab algse faili - faili, milles makro töötab - avatuna ja see on oluline osa, eks? Nüüd, kui mul on seal DeleteMe, avan selle, määran WBN-ile, teen asju, mida pean tegema, vabanen kõigist lisalehtedest - ma tean, mis mul on. Pange tähele, et enne lehtede kustutamist soovite teha DisplayAlerts = False, vastasel juhul küsitakse teilt pidevalt: "Hei, te ei saa lehte tagasi." Saan aru. Ja siis, lõpuks siin, valige esimene tööleht, millest FN saab olema Apple.xlsx, ja siis saame teha WBN-i. Salvesta Apple'ina avatud XML-i töövihikuna. Makrosid pole. Ja siis Sule - Sulge ilus asi on see, et olen nüüd selles töövihikus, 2213, tagasi.eks? Nüüd, kui mul on seal DeleteMe, avan selle, määran WBN-ile, teen asju, mida pean tegema, vabanen kõigist lisalehtedest - ma tean, mis mul on. Pange tähele, et enne lehtede kustutamist soovite teha DisplayAlerts = False, vastasel juhul küsitakse teilt pidevalt: "Hei, te ei saa lehte tagasi." Saan aru. Ja siis, lõpuks siin, valige esimene tööleht, millest FN saab olema Apple.xlsx, ja siis saame teha WBN-i. Salvesta Apple'ina avatud XML-i töövihikuna. Makrosid pole. Ja siis Sule - Sulge ilus asi on see, et olen nüüd selles töövihikus, 2213, tagasi.eks? Nüüd, kui mul on seal DeleteMe, avan selle, määran WBN-ile, teen asju, mida pean tegema, vabanen kõigist lisalehtedest - ma tean, mis mul on. Pange tähele, et enne lehtede kustutamist soovite teha DisplayAlerts = False, vastasel juhul küsitakse teilt pidevalt: "Hei, te ei saa lehte tagasi." Saan aru. Ja siis, lõpuks siin, valige esimene tööleht, millest FN saab olema Apple.xlsx, ja siis saame teha WBN-i. Salvesta Apple'ina avatud XML-i töövihikuna. Makrosid pole. Ja siis Sule - Sulge ilus asi on see, et olen nüüd selles töövihikus, 2213, tagasi.Ma ei saa lehte tagasi. "Ma saan selle. Ja siis, lõpuks siin, valige esimene tööleht FN saab olema Apple.xlsx ja siis saame teha WBN.SaveAs Apple, kui avatud XMLWorkbook. Makrosid pole Ja siis Sule - Sulge ilus asi on see, et olen nüüd tagasi selles töövihikus, 2213.Ma ei saa lehte tagasi. "Ma saan selle. Ja siis, lõpuks siin, valige esimene tööleht FN saab olema Apple.xlsx ja siis saame teha WBN.SaveAs Apple, kui avatud XMLWorkbook. Makrosid pole Ja siis Sule - Sulge ilus asi on see, et olen nüüd tagasi selles töövihikus, 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.

Tänapäevane kokkuvõte: soovite, et VBA kirjutaks mitu eksemplari praegusest töövihikust; Salvesta nimega põhjustab probleeme, kuna algne töövihik pole enam avatud; selle asemel kasutate töövihiku koopia salvestamiseks .SaveAsCopy. Kui soovite töövihiku tänasest videost alla laadida, sealhulgas makro, külastage YouTube'i kirjelduses olevat URL-i.

Ma tahan, et te peatuksite, näeme järgmine kord, kui saate veel ühe netisaate.

Laadige alla Exceli fail

Exceli faili allalaadimiseks: Save-as-Keep-Original-Open.xlsm

Exceli päeva mõte

Olen küsinud oma Exceli meistri sõpradelt Exceli kohta nõu. Tänane mõte mõelda:

"Kuupäevad on numbrid, mitte sõnad."

Duane Aubin

Huvitavad Artiklid...