Зберегти як збереження оригіналу відкритим - Поради Excel

У місяці багато разів мені потрібна книга Excel, щоб створити багато копій. Зазвичай я потрапляю в логічну помилку, відкриваючи * книгу *, і я починаю писати код, щоб прокрутити список і використовувати Файл, Зберегти як, щоб зберегти копію книги.

Ось блок-схема:

Помилка логіки, коли я закриваю книгу

Ви бачите проблему вище? Макрос запущений у WorkbookA. Коли я зберігаю файл як RegionEast.xlsx, а потім закриваю RegionEast.xlsx, макрос перестане працювати.

Зазвичай я глибоко вникаю в псевдокод, перш ніж бачу проблему.

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

Якби я думав наперед, то створив би рішення для двох робочих книжок. Помістіть усі макроси в WorkbookA. Помістіть усі дані до WorkbookB. Нехай WorkbookA неодноразово відкривається WorkbookB, змінюється дані, SaveAs, Close.

Трохи складніше

У міру того, як я старію і стараннішим, я виявляю, що у мене все менше настрою йти з дещо складнішими. Тим більше, що у мене більшість коду працює для оригінальної команди SaveAs.

Сьогоднішня стаття про дивовижний метод VBA для SaveAsCopy. Ця команда буде тримати WorkbookA відкритою і називатись WorkbookA. Макрос може продовжувати працювати. Але він запише поточний стан книги до нової закритої книги, яка називається WorkbookB.

Це дозволяє мені повернутися до початкової схеми:

Простіша логіка, все самодостатньо

Однак я виявив одну проблему із SaveAsCopy. Коли я роблю ThisWorkbook.SaveAs, я можу вибрати, чи хочу я зберегти як XLSX або XLSM. Якщо мені потрібно, щоб макроси були доступні в новій книзі, тоді я використовую XLSM. В іншому випадку я використовую XLSX, і макроси зникнуть.

На жаль, якщо ви знаходитесь у книзі XLSM, ви не зможете успішно .SaveAsCopy та перейдіть на XLSX. Код буде працювати. Але отримана книга не відкриється, оскільки Excel виявляє невідповідність між типом файлу та розширенням файлу.

Моє рішення - SaveAsCopy як XLSM. Після збереження копії я можу відкрити книгу (створивши дві копії книги в пам’яті), а потім 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

Переглянути відео

Стенограма відео

Дізнайтеся Excel з подкасту, епізод 2213: Збережіть як за допомогою VBA, але тримайте оригінал відкритим.

Привіт, ласкаво просимо до мережі. Я Білл Джелен. Ну, ви могли б помітити, що я нещодавно пропоную завантажити кожен подкаст, тому що багато людей просили мене про це, і тому я намагався зробити життя якомога простішим. І вся мета полягала в тому, щоб зберегти копію, яку ви можете завантажити, але я не хотів зайвих речей - ви знаєте, речей, які призначені для мого власного внутрішнього використання - там, тому я хотів позбутися цього.

І, знаєте, припустимо, у мене була ситуація, коли мені довелося написати 12 робочих зошитів, так? Кожен з різними продуктами. Отже, я збираюся переглядати ці продукти, і я збираюся записати їх там у А2, а потім зберегти книгу і, можливо, прибрати щось. Гаразд Отже, мій перший прохід тут - такий макрос, добре? Отже, ми визначаємо поточну книгу - Робочі аркуші ("Дані), Робочі аркуші (" Звіт "), щоб знайти їх, - а потім з'ясуємо, скільки рядків даних у нас є сьогодні, ми збираємося переходити від рядка 2 до останній рядок, скопіюйте виріб із книги даних у книгу звітів.

Гаразд, і ось тут я збираюся потрапити в халепу. Тож нова книга буде називатися "C: aaa ", а потім Apple.xlsx, і я збираюся зберегти як, знаєте, з Apple.xlsx, і перейду на XML - відкрити книгу xml- - який видалить макроси. Гаразд Але зараз я хотів би закрити цю книгу, але, на жаль, коли ви робите Зберегти як - див. Зараз, я перебуваю в підкасті 2013 - коли я роблю Зберегти як після цього пункту в коді, я ні довше буде в Podcast 2013; Я буду в Apple.xlsx. Добре? Отже, якщо я хочу почати видаляти матеріали, я збираюся видалити їх у копії, але коли я закриваю копію, ну, я не можу повернутися до оригінального файлу. Добре? І цей макрос - насправді, моя голова ось-ось вибухне, намагаючись з’ясувати, чи буде цикл все ще працювати чи не працювати,так? Тож я думаю, що Save As - неправильний шлях сюди.

Ну, власне, тримайся. Ми могли б піти двома шляхами: По-перше, я міг би отримати ще одну книгу, яка відкриває Подкаст 2213, робить речі, а потім Зберігає Як і з новою назвою, або я збираюся піти цим шляхом, добре, і це метод, який я закінчив використовуючи - добре, і ми збираємося визначити цю книгу, а потім також нову книгу. Правильно. І тут все приблизно однаково, поки не дійдемо до того моменту, коли я збирався зробити WBT.SaveAs. Перевірте це: SaveCopyAs-- тепер, наскільки я можу зрозуміти, цього не існує в звичайному Excel … це лише VBA. SaveCopyAs каже: "Гей, дивись, ми знаходимось у файлі під назвою 2213, і я хочу, щоб ти взяв цей файл 2213 у його поточному стані, і зберегли його на диск, і закрили". Тримайте оригінальний файл відкритим - 2213 залишається відкритим, - але тепер на диску є абсолютно новий файл, який називається Apple.xlsm. Насправді, спочатку яя просто називатиму це DeleteMe.xlsm. Гаразд Але він створює ідентичну копію і зберігає оригінальний файл - файл, в якому запущений макрос - відкритим, і це важлива частина, чи не так? Отже, тепер у мене є DeleteMe, я відкриваю його, призначаю WBN, роблю те, що мені потрібно робити, позбавляюся всіх зайвих аркушів - я знаю, що у мене є. Зверніть увагу, що перед тим, як видалити аркуші, ви хочете зробити DisplayAlerts = False, інакше він постійно запитує вас: "Гей, ти не збираєшся повертати аркуш". Зрозуміла. А потім, нарешті, тут, виберіть перший аркуш FN, який буде Apple.xlsx, і тоді ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Немає макросів. А потім Закрити - найкрасивіше про Закрити - це те, що я зараз у цій книзі, 2213.Але він створює ідентичну копію і зберігає оригінальний файл - файл, в якому запущений макрос - відкритим, і це важлива частина, чи не так? Тому тепер, коли у мене є DeleteMe, я відкриваю його, призначаю WBN, роблю те, що мені потрібно робити, позбавляюся всіх зайвих аркушів - я знаю, що у мене є. Зверніть увагу, що перед тим, як видалити аркуші, ви хочете зробити DisplayAlerts = False, інакше він постійно запитує вас: "Гей, ти не збираєшся повертати аркуш". Зрозуміла. А потім, нарешті, тут, виберіть перший робочий аркуш FN, який буде Apple.xlsx, і тоді ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Немає макросів. А потім Закрити - найкрасивіше про Закрити - це те, що я зараз у цій книзі, 2213.Але він створює ідентичну копію і зберігає оригінальний файл - файл, в якому запущений макрос - відкритим, і це важлива частина, чи не так? Отже, тепер у мене є DeleteMe, я відкриваю його, призначаю WBN, роблю те, що мені потрібно робити, позбавляюся всіх зайвих аркушів - я знаю, що у мене є. Зверніть увагу, що перед тим, як видалити аркуші, ви хочете зробити DisplayAlerts = False, інакше він постійно запитує вас: "Гей, ти не збираєшся повертати аркуш". Зрозуміла. А потім, нарешті, тут, виберіть перший аркуш FN, який буде Apple.xlsx, і тоді ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Немає макросів. А потім Закрити - найкрасивіше про Закрити - це те, що я зараз у цій книзі, 2213.так? Отже, тепер у мене є DeleteMe, я відкриваю його, призначаю WBN, роблю те, що мені потрібно робити, позбавляюся всіх зайвих аркушів - я знаю, що у мене є. Зверніть увагу, що перед тим, як видалити аркуші, ви хочете зробити DisplayAlerts = False, інакше він постійно запитує вас: "Гей, ти не збираєшся повертати аркуш". Зрозуміла. А потім, нарешті, тут, виберіть перший аркуш FN, який буде Apple.xlsx, і тоді ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Немає макросів. А потім Закрити - найкрасивіше про Закрити - це те, що я зараз у цій книзі, 2213.так? Отже, тепер у мене є DeleteMe, я відкриваю його, призначаю WBN, роблю те, що мені потрібно робити, позбавляюся всіх зайвих аркушів - я знаю, що у мене є. Зверніть увагу, що перед тим, як видалити аркуші, ви хочете зробити DisplayAlerts = False, інакше він постійно запитує вас: "Гей, ти не збираєшся повертати аркуш". Зрозуміла. А потім, нарешті, тут, виберіть перший аркуш FN, який буде Apple.xlsx, і тоді ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Немає макросів. А потім Закрити - найкрасивіше про Закрити - це те, що я зараз у цій книзі, 2213.я не збираюся повертати аркуш ". Я розумію. І, нарешті, тут, виберіть перший робочий аркуш FN, який буде Apple.xlsx, а потім ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Без макросів А потім Закрити - найкрасивіше про Закрити - це те, що я повернувся до цієї книги, 2213.я не збираюся повертати аркуш ". Я розумію. І, нарешті, тут, виберіть перший робочий аркуш FN, який буде Apple.xlsx, а потім ми зможемо зробити WBN.SaveAs Apple, як Open XMLWorkbook. Без макросів А потім Закрити - найкрасивіше про Закрити - це те, що я зараз у цій книзі, 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.

Підсумок із сьогоднішнього дня: Ви хочете, щоб VBA написала кілька примірників поточної книги; Зберегти як викликає проблеми, оскільки оригінальна книга більше не відкрита; замість цього ви використовуєте .SaveAsCopy для збереження копії книги. Якщо ви хочете завантажити книгу із сьогоднішнього відео, включаючи макрос, відвідайте URL-адресу в описі YouTube.

Я хочу, щоб ви завітали до нас, і побачимось наступного разу для чергової трансляції від.

Завантажте файл Excel

Щоб завантажити файл excel: save-as-keep-original-open.xlsm

Думка дня в Excel

Я попросив своїх друзів Excel Master порадити їх щодо Excel. Сьогоднішня думка поміркувати:

"Дати - це цифри, а не слова".

Дуейн Обен

Цікаві статті...