Simpan Sebagai Tetap Terbuka Asli - Tips Excel

Daftar Isi

Ada banyak waktu dalam sebulan di mana saya membutuhkan buku kerja Excel untuk membuat banyak salinannya sendiri. Saya biasanya mengalami bug logika dengan membuka * the * workbook dan saya mulai menulis kode untuk mengulang melalui daftar dan menggunakan File, Save As untuk menyimpan salinan buku kerja.

Berikut diagram alirnya:

Kesalahan logika saat saya menutup buku kerja

Apakah Anda melihat masalah di atas? Makro berjalan di WorkbookA. Ketika saya Menyimpan Sebagai file sebagai RegionEast.xlsx dan kemudian menutup RegionEast.xlsx, makro akan berhenti berjalan.

Saya biasanya sudah jauh ke dalam pseudocode sebelum saya melihat masalahnya.

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

Seandainya saya berpikir ke depan, saya akan membuat solusi dua buku kerja. Letakkan semua makro di WorkbookA. Letakkan semua data di WorkbookB. Minta WorkbookA berulang kali membuka WorkbookB, ubah datanya, SaveAs, Close.

Sedikit lebih rumit

Seiring bertambahnya usia dan semakin ngambek, saya menemukan bahwa saya kurang mood untuk pergi dengan sedikit lebih rumit. Terutama karena saya memiliki sebagian besar kode yang berfungsi untuk perintah SaveAs asli.

Artikel hari ini adalah tentang metode VBA yang luar biasa untuk SaveAsCopy. Perintah ini akan membuat WorkbookA tetap terbuka dan disebut WorkbookA. Makro dapat terus berjalan. Tapi itu akan menuliskan status buku kerja saat ini ke buku kerja tertutup baru yang disebut WorkbookB.

Ini memungkinkan saya untuk kembali ke diagram alir asli:

Logika yang lebih sederhana, semuanya mandiri

Namun, saya menemukan satu masalah dengan SaveAsCopy. Saat saya melakukan ThisWorkbook.SaveAs, saya dapat memilih apakah saya ingin menyimpan sebagai XLSX atau XLSM. Jika saya membutuhkan makro untuk tersedia di buku kerja baru, maka saya menggunakan XLSM. Jika tidak, saya menggunakan XLSX dan makro akan hilang.

Sayangnya, jika Anda berada di buku kerja XLSM, Anda tidak berhasil .SaveAsCopy dan ubah ke XLSX. Kode akan bekerja. Tetapi buku kerja yang dihasilkan tidak akan terbuka karena Excel mendeteksi ketidaksesuaian antara tipe file dan ekstensi file.

Solusi saya adalah SaveAsCopy sebagai XLSM. Setelah salinan disimpan, saya bisa membuka buku kerja (membuat dua salinan buku kerja di memori) dan kemudian 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

Menonton video

Transkrip Video

Pelajari Excel dari Podcast, Episode 2213: Simpan Sebagai Menggunakan VBA, Tapi Pertahankan Yang Asli Terbuka.

Hei, selamat datang kembali di netcast. Saya Bill Jelen. Nah, Anda mungkin telah memperhatikan bahwa saya telah menawarkan unduhan setiap podcast baru-baru ini karena banyak orang meminta saya untuk itu, jadi saya berusaha membuat hidup semudah mungkin. Dan tujuan utamanya adalah untuk menyimpan salinan yang dapat Anda unduh, tetapi saya tidak menginginkan hal-hal tambahan-- Anda tahu, hal-hal yang untuk penggunaan internal saya sendiri-- di sana, jadi saya ingin membuangnya.

Dan, Anda tahu, katakanlah saya mengalami situasi di mana saya harus menulis 12 buku kerja, bukan? Masing-masing dengan produk yang berbeda. Jadi, saya akan mengulang produk ini dan saya akan menulisnya di sana ke A2 dan kemudian menyimpan buku kerja, dan mungkin membersihkan beberapa hal. Baik. Jadi lintasan pertamaku ke sini adalah makro seperti ini, oke? Jadi, kami mendefinisikan buku kerja saat ini-- Lembar Kerja ("Data), Lembar Kerja (" Laporan ") untuk menemukannya-- lalu mencari tahu berapa banyak baris data yang kami miliki hari ini, kami akan mengulang dari Baris 2 ke bawah baris terakhir, salin produk dari buku kerja data ke buku kerja laporan.

Baiklah, dan sekarang di sinilah saya akan mendapat masalah. Jadi buku kerja baru akan dinamai "C: aaa " dan kemudian Apple.xlsx, dan saya akan ke Save As a, Anda tahu, dengan Apple.xlsx, dan berubah menjadi XML-- buka buku kerja xml- - yang akan menghapus makro. Baik. Tapi sekarang saya ingin menutup buku kerja itu, tapi sayangnya ketika Anda melakukan Save As-- lihat sekarang, saya di podcast 2013-- ketika saya melakukan Save As setelah titik di kode, saya tidak lagi akan berada di Podcast 2013; Saya akan berada di Apple.xlsx. Baik? Jadi, sekarang, jika saya ingin mulai menghapus sesuatu, saya akan menghapusnya di salinan, tetapi ketika saya menutup salinannya, saya tidak bisa kembali ke file aslinya. Baik? Dan makro ini-- sebenarnya, kepalaku akan meledak mencoba mencari tahu apakah loop akan tetap berfungsi atau tidak,Baik? Jadi saya pikir Save As adalah cara yang salah untuk pergi ke sini.

Yah, sebenarnya, tunggu. Kita bisa pergi dua rute: Pertama, saya bisa memiliki buku kerja lain yang membuka Podcast 2213, melakukan hal-hal itu dan kemudian Menyimpan Sebagai dengan nama baru, atau saya akan pergi dengan cara ini, baiklah, dan ini adalah metode yang akhirnya saya lakukan. menggunakan-- baiklah, dan kami akan menentukan buku kerja ini, tetapi juga buku kerja baru. Baik. Dan semuanya sama di sini sampai kita mencapai titik di mana saya akan melakukan WBT.SaveAs. Lihat ini: SaveCopyAs-- sekarang, ini tidak ada, sejauh yang saya tahu, di Excel biasa… ini hanya VBA. SaveCopyAs mengatakan, "Hei, lihat kita ada dalam file bernama 2213 dan saya ingin Anda mengambil file 2213 itu dalam keadaannya saat ini, dan menyimpannya ke disk, lalu tutup.” Biarkan file asli tetap terbuka-- 2213 tetap terbuka-- tetapi sekarang kami memiliki file baru di disk yang disebut Apple.xlsm. Sebenarnya, pada awalnya, saya 'Saya hanya akan menyebutnya DeleteMe.xlsm. Baik. Tapi itu membuat salinan yang identik dan membuat file asli - file tempat makro berjalan - terbuka, dan itu bagian yang penting, bukan? Jadi sekarang saya memiliki DeleteMe di luar sana, saya membukanya, menetapkannya ke WBN, melakukan hal-hal yang perlu saya lakukan, menyingkirkan semua lembar ekstra-- Saya tahu apa yang saya miliki. Perhatikan, sebelum Anda menghapus lembar, Anda ingin melakukan DisplayAlerts = False, jika tidak, Anda akan terus bertanya, "Hei, Anda tidak akan mendapatkan lembar kembali." Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita bisa melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro. Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.Tapi itu membuat salinan yang identik dan membuat file asli - file tempat makro berjalan - terbuka, dan itu bagian yang penting, bukan? Jadi sekarang saya memiliki DeleteMe di luar sana, saya membukanya, menetapkannya ke WBN, melakukan hal-hal yang perlu saya lakukan, menyingkirkan semua lembar ekstra-- Saya tahu apa yang saya miliki. Perhatikan, sebelum Anda menghapus lembar, Anda ingin melakukan DisplayAlerts = False, jika tidak, Anda akan terus bertanya, "Hei, Anda tidak akan mendapatkan lembar kembali." Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita bisa melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro. Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.Tapi itu membuat salinan yang identik dan membuat file asli - file tempat makro berjalan - terbuka, dan itu bagian yang penting, bukan? Jadi sekarang saya memiliki DeleteMe di luar sana, saya membukanya, menetapkannya ke WBN, melakukan hal-hal yang perlu saya lakukan, menyingkirkan semua lembar ekstra-- Saya tahu apa yang saya miliki. Perhatikan, sebelum Anda menghapus lembar, Anda ingin melakukan DisplayAlerts = False, jika tidak, Anda akan terus bertanya, "Hei, Anda tidak akan mendapatkan lembar kembali." Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita bisa melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro. Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.Baik? Jadi sekarang saya memiliki DeleteMe di luar sana, saya membukanya, menetapkannya ke WBN, melakukan hal-hal yang perlu saya lakukan, menyingkirkan semua lembar ekstra-- Saya tahu apa yang saya miliki. Perhatikan, sebelum Anda menghapus lembar, Anda ingin melakukan DisplayAlerts = False, jika tidak, Anda akan terus bertanya, "Hei, Anda tidak akan mendapatkan lembar kembali." Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita dapat melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro. Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.Baik? Jadi sekarang saya memiliki DeleteMe di luar sana, saya membukanya, menetapkannya ke WBN, melakukan hal-hal yang perlu saya lakukan, menyingkirkan semua lembar ekstra-- Saya tahu apa yang saya miliki. Perhatikan, sebelum Anda menghapus lembar, Anda ingin melakukan DisplayAlerts = False, jika tidak, Anda akan terus bertanya, "Hei, Anda tidak akan mendapatkan lembar kembali." Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita dapat melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro. Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.kembali tidak akan mendapatkan lembar itu kembali. "Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita bisa melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro . Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.kembali tidak akan mendapatkan lembar itu kembali. "Saya mengerti. Dan kemudian, akhirnya di sini, pilih lembar kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita bisa melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tidak ada makro . Dan kemudian Tutup-- hal yang indah tentang Tutup adalah saya sekarang kembali ke buku kerja ini, 2213.

Baiklah, ini bekerja dengan sangat, sangat baik, dan kunci dari semuanya ini adalah SaveCopyAs-- SaveCopyAs. Jadi, bagi saya - itu sudah ada sejak lama - saya tidak pernah menggunakannya, dan sekarang saya menyadari mungkin ada banyak waktu di masa lalu di mana saya seharusnya menggunakannya. Dan mungkin, Anda tahu, Anda harus menggunakannya atau mempertimbangkan untuk menggunakannya juga.

Oke, saya lupa menyebutkan satu hal: yang penting adalah, dengan Save As Copy-- Save As Copy-- jadi ketika saya melakukan Save As Copy, jika saya mencoba mengubah ke jenis file xslx, saya tidak bisa mengubah file ketik di sini hanya dengan mengubah ekstensi di NewFN dan ketika mencoba membuka buku kerja berikutnya, mereka akan mendeteksi bahwa buku kerja itu memiliki makro, dan memiliki ekstensi yang salah, dan ia akan berteriak pada Anda. Baik? Jadi, Anda harus menyimpannya sebagai xlsm dan kemudian kembali lagi, membukanya kembali, dan menyimpannya sebagai xlsx. Tapi itu semua bekerja dengan makro ini.

Jadi, hei, ketika saya memperbarui buku ini, Excel 2016, musim panas ini, untuk Excel 2019, saya akan memastikan untuk menyertakan tip ini. Saya pikir ini tip yang berguna untuk SaveCopyAs.

Penutupan hari ini: Anda ingin VBA menulis beberapa salinan dari workbook saat ini; Simpan Sebagai menyebabkan masalah karena buku kerja asli tidak lagi terbuka; sebagai gantinya Anda menggunakan .SaveAsCopy untuk menyimpan salinan buku kerja. Jika Anda ingin mengunduh buku kerja dari video hari ini, termasuk makro, kunjungi URL di deskripsi YouTube.

Saya ingin Anda mampir, sampai jumpa lain kali untuk netcast lain dari.

Unduh File Excel

Untuk mengunduh file excel: save-as-keep-original-open.xlsm

Pemikiran Excel Hari Ini

Saya telah meminta saran dari teman-teman Master Excel saya tentang Excel. Hari ini pemikiran untuk direnungkan:

"Tanggal adalah angka, bukan kata."

Duane Aubin

Artikel yang menarik...