Mentés másként az eredeti nyitva tartása - Excel tippek

Tartalomjegyzék

Egy hónapban sokszor van szükségem egy Excel munkafüzetre, hogy sok példányt készíthessek belőle. Általában egy logikai hibába kerülök, ha kinyitom a * munkafüzetet, és elkezdek kódot írni, hogy végignézhessem a listát, és a Fájl, Mentés másikként mentsem el a munkafüzet egy példányát.

Itt van a folyamatábra:

Logikai hiba a munkafüzet bezárásakor

Látja a fenti problémát? A makró a WorkbookA-ban fut. Amikor a fájl mentése RegionEast.xlsx néven, majd bezárja a RegionEast.xlsx fájlt, a makró leáll.

Általában mélyen az álkódban vagyok, mielőtt meglátom a problémát.

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

Ha előre gondolkodtam volna, két munkafüzetet készítettem volna. Helyezze az összes makrót a WorkbookA-ba. Helyezze az összes adatot a WorkbookB-be. A WorkbookA ismételten nyissa meg a WorkbookB-t, módosítsa az adatokat, a SaveAs, a Bezárás lehetőséget.

Kicsit bonyolultabb

Ahogy öregszem és magányosabb leszek, azt tapasztalom, hogy kevésbé van kedvem valamivel bonyolultabbakhoz menni. Különösen azért, mert a legtöbb kód az eredeti SaveAs parancsnál működik.

A mai cikk a SaveAsCopy fantasztikus VBA módszeréről szól. Ez a parancs nyitva tartja a WorkbookA címet és WorkbookA néven szerepel. A makró tovább futhat. De kiírja a munkafüzet aktuális állapotát egy új, zárt munkafüzetbe, WorkbookB néven.

Ez lehetővé teszi, hogy visszatérjek az eredeti folyamatábrához:

Egyszerűbb logika, minden önálló

Azonban egy problémát fedeztem fel a SaveAsCopy-val. Amikor ezt a Munkafüzetet.SaveAs-t csinálom, kiválaszthatom, hogy XLSX vagy XLSM formátumban szeretnék-e menteni. Ha szükségem van a makrók elérhetőségére az új munkafüzetben, akkor az XLSM-et használom. Egyébként XLSX-et használok, és a makrók eltűnnek.

Sajnos, ha XLSM-munkafüzetbe került, akkor nem tudja sikeresen .SaveAsCopy-t módosítani, és átváltani XLSX-re. A kód működni fog. De a kapott munkafüzet nem nyílik meg, mivel az Excel hibás egyezést észlel a fájltípus és a fájlkiterjesztés között.

Az én megoldásom az, hogy a SaveAsCopy-t XLSM-ként használjam. Miután elmentette a példányt, megnyithatom a munkafüzetet (létrehozva a munkafüzet két példányát a memóriában), majd a SaveAs XLSX fájlt.

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

Videót nézni

Videó átirat

Ismerje meg az Excel programot a Podcast 2222-es epizódjából: Mentés másként VBA használatával, de az eredetit tartsa nyitva.

Hé, üdvözlöm a netcaston. Bill Jelen vagyok. Nos, észrevehette, hogy a közelmúltban ajánlottam az egyes podcastok letöltését, mert sokan ezt kérték tőlem, és ezért igyekeztem a lehető legkönnyebbé tenni az életet. És az volt a cél, hogy elmentse egy letölthető példányt, de nem akartam ott a plusz dolgokat - tudod, a saját belső használatra szánt cuccokat -, ezért meg akartam szabadulni ettől.

És tudod, tegyük fel, hogy volt olyan helyzetem, hogy 12 munkafüzetet kellett írnom, igaz? Mindegyik más termékkel. Tehát áttekintem ezeket a termékeket, és odaírom az A2-be, majd elmentem a munkafüzetet, és esetleg kitakarítok néhány dolgot. Rendben. Tehát az első átjutásom egy ilyen makró, rendben? Tehát meghatározzuk az aktuális munkafüzetet - Munkalapok ("Adatok", Munkalapok ("Jelentés") ezek megtalálásához -, majd kitaláljuk, hogy hány adatsorunk van ma, a 2. sorból lefelé haladunk az utolsó sorba másolja át a terméket az adatfüzetből a jelentés munkafüzetébe.

Rendben, és most itt vagyok, ahol bajba kerülök. Tehát az új munkafüzet neve "C: aaa ", majd az Apple.xlsx lesz, és a Mentés másként fogok menteni, tudod, az Apple.xlsx-szel, és átállok XML-re - nyisd meg az xml munkafüzet- - amely kicsípi a makrókat. Rendben. De most szeretném bezárni azt a munkafüzetet, de sajnos, amikor Ön Mentés másként dolgozik - lásd most, a 2013-as podcast-ban vagyok - amikor a Mentés másként műveletet végzek a kód ezen pontja után, nem vagyok tovább lesz a Podcast 2013-ban; Az Apple.xlsx-ben leszek. Rendben? Tehát, ha el akarom kezdeni a cuccok törlését, akkor azokat a másolatból is törlöm, de ha bezárom a másolatot, akkor nem tudok visszatérni az eredeti fájlhoz. Rendben? És ez a makró - valójában a fejem fel fog robbanni, és megpróbálom kitalálni, hogy a hurok továbbra is működik-e vagy sem,jobb? Tehát úgy gondolom, hogy a Mentés másként helytelen út.

Nos, valójában tarts ki. Két útvonalon haladhatunk: Először is kaphatnék egy másik munkafüzetet, amely megnyitja a Podcast 2213-at, elvégzi a dolgokat, majd elmenti az új nevet, vagy elmegyek erre az útra, rendben, és ez az a módszer, amelyre végül kerültem rendben, és meghatározzuk ezt a munkafüzetet, de akkor egy új munkafüzetet is. Jobb. És minden hasonló itt lent, amíg el nem jutunk oda, hogy a WBT.SaveAs-t akartam csinálni. Nézze meg ezt: SaveCopyAs-- most ez nem létezik, amennyire meg tudom mondani, a szokásos Excel-ben … ez csak a VBA. A SaveCopyAs azt mondja: "Hé, nézze meg, hogy egy 2213 nevű fájlban vagyunk, és azt akarom, hogy ezt a 2213 fájlt a jelenlegi állapotában vigye, lemezre mentse és bezárja." Tartsa nyitva az eredeti fájlt - a 2213 nyitva marad -, de most egy teljesen új fájl található a lemezen, az Apple.xlsm néven. Valójában előszörm csak DeleteMe.xlsm-nek fogom hívni. Rendben. De azonos másolatot készít, és az eredeti fájlt - a makró által futtatott fájlt - nyitva tartja, és ez a fontos rész, igaz? Tehát most, hogy ott van a DeleteMe, kinyitom, hozzárendelem a WBN-hez, elvégzem a szükséges dolgokat, megszabadulok az összes extra laptól - tudom, mi van. Figyelje meg, hogy a munkalapok törlése előtt meg kell tennie a DisplayAlerts = False értéket, különben folyamatosan azt kérdezi Öntől: "Hé, nem fogja visszakapni a lapot." Értem. És végül itt válassza ki az első munkalapot, amelyből az FN az Apple.xlsx lesz, majd megtehetjük a WBN-t. SaveAs, mint Open XMLWorkbook. Nincsenek makrók. Aztán Bezárás - a Bezárás gyönyörűsége, hogy visszatértem ebbe a munkafüzetbe, 2213.De azonos másolatot hoz létre, és az eredeti fájlt - a makró által futtatott fájlt - nyitva tartja, és ez a fontos rész, igaz? Tehát most, hogy ott van a DeleteMe, kinyitom, hozzárendelem a WBN-hez, elvégzem a szükséges dolgokat, megszabadulok az összes plusz laptól - tudom, mi van. Figyelje meg, hogy a munkalapok törlése előtt meg kell tennie a DisplayAlerts = False értéket, különben folyamatosan azt kérdezi Öntől: "Hé, nem fogja visszakapni a lapot." Értem. És végül itt válassza ki az első munkalapot, amelyből az FN az Apple.xlsx lesz, majd megtehetjük a WBN-t. SaveAs, mint egy Open XMLWorkbook. Nincsenek makrók. Aztán Bezárás - a Bezárás gyönyörűsége, hogy visszatértem ebbe a munkafüzetbe, 2213.De azonos másolatot hoz létre, és az eredeti fájlt - a makró által futtatott fájlt - nyitva tartja, és ez a fontos rész, igaz? Tehát most, hogy ott van a DeleteMe, kinyitom, hozzárendelem a WBN-hez, elvégzem a szükséges dolgokat, megszabadulok az összes plusz laptól - tudom, mi van. Figyelje meg, hogy a munkalapok törlése előtt meg kell tennie a DisplayAlerts = False értéket, különben folyamatosan azt kérdezi Öntől: "Hé, nem fogja visszakapni a lapot." Értem. És végül itt válassza ki az első munkalapot, amelyből az FN az Apple.xlsx lesz, majd megtehetjük a WBN-t. SaveAs, mint egy Open XMLWorkbook. Nincsenek makrók. Aztán Bezárás - a Bezárás gyönyörűsége, hogy visszatértem ebbe a munkafüzetbe, 2213.jobb? Tehát most, hogy ott van a DeleteMe, kinyitom, hozzárendelem a WBN-hez, elvégzem a szükséges dolgokat, megszabadulok az összes extra laptól - tudom, mi van. Figyelje meg, hogy a munkalapok törlése előtt meg kell tennie a DisplayAlerts = False értéket, különben folyamatosan azt kérdezi Öntől: "Hé, nem fogja visszakapni a lapot." Értem. És végül itt válassza ki az első munkalapot, amelyből az FN az Apple.xlsx lesz, majd megtehetjük a WBN-t. SaveAs, mint egy Open XMLWorkbook. Nincsenek makrók. Aztán Bezárás - a Bezárás gyönyörűsége, hogy visszatértem ebbe a munkafüzetbe, 2213.jobb? Tehát most, hogy ott van a DeleteMe, kinyitom, hozzárendelem a WBN-hez, elvégzem a szükséges dolgokat, megszabadulok az összes plusz laptól - tudom, mi van. Figyelje meg, hogy a munkalapok törlése előtt meg kell tennie a DisplayAlerts = False értéket, különben folyamatosan azt kérdezi Öntől: "Hé, nem fogja visszakapni a lapot." Értem. És végül itt válassza ki az első munkalapot, amelyből az FN az Apple.xlsx lesz, majd megtehetjük a WBN-t. SaveAs, mint Open XMLWorkbook. Nincsenek makrók. Aztán Bezárás - a Bezárás gyönyörűsége, hogy visszatértem ebbe a munkafüzetbe, 2213.Nem fogom visszakapni a lapot. "Értem. És végül itt válassza ki az első munkalapot, amely FN lesz az Apple.xlsx, majd megtehetjük a WBN.SaveAs-t, mint Open XMLWorkbook. Nincsenek makrók. És akkor Bezárás - a Bezárás gyönyörűsége, hogy visszatértem ebbe a munkafüzetbe, 2213.Nem fogom visszakapni a lapot. "Értem. És végül itt válassza ki az első munkalapot, amely FN lesz az Apple.xlsx, majd megtehetjük a WBN.SaveAs-t, mint Open XMLWorkbook. Nincsenek makrók. És akkor Bezárás - a Bezárás gyönyörűsége az, hogy visszatértem ebbe a munkafüzetbe, 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.

Összegzés mától: Szeretné, ha a VBA több példányt írna a jelenlegi munkafüzetből; A Mentés másként problémákat okoz, mert az eredeti munkafüzet már nincs nyitva; ehelyett a .SaveAsCopy programmal menti a munkafüzet egy példányát. Ha le szeretné tölteni a munkafüzetet a mai videóról, beleértve a makrót is, keresse fel a YouTube leírásában található URL-t.

Szeretném, ha betértél volna, találkozunk legközelebb egy másik netcast-re.

Töltse le az Excel fájlt

Az Excel fájl letöltése: Save-as-Keep-Original-Open.xlsm

Excel gondolata a napnak

Az Excel Master barátaimtól kértem tanácsokat az Excel-mel kapcsolatban. Mai gondolat, hogy elgondolkodjak:

"A dátumok számok, nem szavak."

Duane Aubin

érdekes cikkek...