Simpan Sebagai Tetap Buka Asal - Petua Excel

Isi kandungan

Ada banyak kali dalam sebulan di mana saya memerlukan buku kerja Excel untuk membuat banyak salinannya sendiri. Saya biasanya masuk ke pepijat logik dengan membuka * buku kerja * dan saya mula menulis kod untuk mencari senarai dan menggunakan Fail, Simpan Sebagai untuk menyimpan salinan buku kerja.

Berikut adalah carta alir:

Kesalahan logik semasa saya menutup buku kerja

Adakah anda melihat masalah di atas? Makro dijalankan di WorkbookA. Apabila saya Simpan Sebagai fail sebagai RegionEast.xlsx dan kemudian tutup RegionEast.xlsx, makro akan berhenti berjalan.

Saya biasanya berada di 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

Sekiranya saya berfikir ke depan, saya akan mencipta penyelesaian buku kerja dua. Letakkan semua makro di WorkbookA. Masukkan semua data dalam Buku KerjaB. Mempunyai WorkbookA berulang kali membuka WorkbookB, menukar data, SaveAs, Close.

Sedikit lebih rumit

Apabila saya semakin tua dan lebih curang, saya merasa kurang berminat untuk pergi dengan sedikit lebih rumit. Terutama kerana saya mempunyai sebahagian besar kod yang berfungsi untuk perintah SaveAs yang asal.

Artikel hari ini adalah mengenai kaedah VBA yang hebat untuk SaveAsCopy. Arahan ini akan memastikan WorkbookA terbuka dan dipanggil WorkbookA. Makro boleh terus berjalan. Tetapi ia akan menuliskan keadaan buku kerja terkini kepada buku kerja tertutup baru yang disebut WorkbookB.

Ini membolehkan saya kembali ke carta aliran asal:

Logik yang lebih ringkas, semuanya serba lengkap

Walau bagaimanapun, saya menemui satu masalah dengan SaveAsCopy. Apabila saya melakukan ThisWorkbook.SaveAs, saya boleh memilih sama ada saya mahu menyimpan sebagai XLSX atau XLSM. Sekiranya saya memerlukan makro untuk tersedia dalam buku kerja baru, maka saya menggunakan XLSM. Jika tidak, saya menggunakan XLSX dan makro akan hilang.

Malangnya, jika anda menggunakan buku kerja XLSM, anda tidak dapat berjaya. SimpanAsCopy dan tukar ke XLSX. Kod akan berfungsi. Tetapi buku kerja yang dihasilkan tidak akan dibuka kerana Excel mengesan ketidaksesuaian antara jenis fail dan peluasan fail.

Penyelesaian saya ialah SaveAsCopy sebagai XLSM. Setelah salinan disimpan, saya dapat membuka buku kerja (membuat dua salinan buku kerja dalam 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

Tonton Video

Transkrip Video

Belajar Excel dari Podcast, Episod 2213: Simpan Seperti Menggunakan VBA, Tetapi Biarkan Asal Buka.

Hai, selamat datang kembali ke siaran net. Saya Bill Jelen. Anda mungkin menyedari bahawa saya telah menawarkan muat turun setiap podcast baru-baru ini kerana banyak orang meminta saya untuk itu, dan oleh itu saya berusaha menjadikan hidup semudah mungkin. Dan keseluruhan tujuannya adalah untuk menyimpan salinan yang boleh anda muat turun, tetapi saya tidak mahu barang tambahan itu - anda tahu, barang yang untuk kegunaan dalaman saya sendiri - di sana, jadi saya ingin menyingkirkannya.

Dan, anda tahu, katakan bahawa saya mempunyai situasi di mana saya terpaksa menulis 12 buku kerja, bukan? Masing-masing dengan produk yang berbeza. Oleh itu, saya akan mencari-cari produk ini dan saya akan menulisnya di A2 dan kemudian menyimpan buku kerja, dan mungkin membersihkan beberapa barang. Baiklah. Jadi yang pertama saya lalui di sini adalah makro seperti ini, okey? Oleh itu, kami menentukan buku kerja semasa - Lembaran Kerja ("Data), Lembaran Kerja (" Laporan ") untuk mencari - dan kemudian mengetahui berapa banyak baris data yang kita ada hari ini, kita akan beralih dari Baris 2 hingga ke baris terakhir, salin produk dari buku kerja data ke buku kerja laporan.

Baiklah, dan di sinilah saya akan menghadapi masalah. Jadi buku kerja baru akan dipanggil "C: aaa " dan kemudian Apple.xlsx, dan saya akan Simpan sebagai, anda tahu, dengan Apple.xlsx, dan ubah ke XML - buka buku kerja xml- - yang akan menghilangkan makro. Baiklah. Tetapi sekarang saya ingin menutup buku kerja itu, tetapi malangnya ketika anda melakukan Save As-- lihat sekarang, saya berada di podcast 2013-- ketika saya melakukan Save As setelah itu dalam kod, saya tidak lebih lama lagi di Podcast 2013; Saya akan berada di Apple.xlsx. Baiklah? Jadi, sekarang, jika saya ingin mula memadamkan barang, saya akan menghapusnya dalam salinan, tetapi apabila saya menutup salinannya, saya tidak dapat kembali ke fail asalnya. Baiklah? Dan makro ini - sebenarnya, kepala saya akan meletup cuba mencari tahu apakah gelung itu masih berfungsi atau tidak berfungsi,betul? Oleh itu, saya fikir Save As adalah cara yang salah untuk pergi ke sini.

Nah, sebenarnya, tunggu. Kami boleh menempuh dua laluan: Pertama, saya boleh mempunyai buku kerja lain yang membuka Podcast 2213, melakukan perkara dan kemudian Simpan seperti dengan nama baru, atau saya akan pergi dengan cara ini, baiklah, dan ini adalah kaedah yang saya akhirnya menggunakan-- baiklah, dan kita akan menentukan buku kerja ini, tetapi juga buku kerja baru. Betul. Dan semuanya sama di sini sehingga kita sampai ke titik di mana saya hendak melakukan WBT.SaveAs. Lihat ini: SaveCopyAs-- sekarang, ini tidak wujud, sejauh yang saya tahu, dalam Excel biasa … ini hanya VBA. SaveCopyAs berkata, "Hei, lihat kami ada dalam fail bernama 2213 dan saya mahu anda mengambil fail 2213 dalam keadaannya sekarang, dan simpan ke disk, dan tutup." Pastikan fail asal tetap terbuka - 2213 tetap terbuka - tetapi sekarang kami mempunyai fail baru di cakera yang dipanggil Apple.xlsm. Sebenarnya, pada mulanya, saya 'saya hanya akan memanggilnya DeleteMe.xlsm. Baiklah. Tetapi ia menghasilkan salinan yang sama dan menyimpan fail asalnya - fail yang sedang dijalankan oleh makro - terbuka, dan itulah bahagian penting, bukan? Oleh itu, setelah saya mempunyai DeleteMe di luar sana, saya membukanya, memberikannya kepada WBN, melakukan perkara yang perlu saya lakukan, menyingkirkan semua helaian tambahan - Saya tahu apa yang saya ada. Perhatikan, sebelum anda menghapus helaian, anda ingin melakukan DisplayAlerts = False, jika tidak, ia terus bertanya kepada anda, "Hai, anda tidak akan mendapatkan kembali helaian itu." Saya faham. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita boleh melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tiada makro. Dan kemudian Tutup - perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.Tetapi ia menghasilkan salinan yang sama dan menyimpan fail asalnya - fail yang sedang dijalankan oleh makro - terbuka, dan itulah bahagian penting, bukan? Oleh itu, setelah saya mempunyai DeleteMe di luar sana, saya membukanya, memberikannya kepada WBN, melakukan perkara yang perlu saya lakukan, menyingkirkan semua helaian tambahan - Saya tahu apa yang saya ada. Perhatikan, sebelum anda menghapus helaian, anda ingin melakukan DisplayAlerts = False, jika tidak, ia terus bertanya kepada anda, "Hai, anda tidak akan mendapatkan kembali helaian itu." Saya faham. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita boleh melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tiada makro. Dan kemudian Tutup - perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.Tetapi ia menghasilkan salinan yang sama dan menyimpan fail asalnya - fail yang sedang dijalankan oleh makro - terbuka, dan itulah bahagian penting, bukan? Oleh itu, setelah saya mempunyai DeleteMe di luar sana, saya membukanya, memberikannya kepada WBN, melakukan perkara yang perlu saya lakukan, menyingkirkan semua helaian tambahan - Saya tahu apa yang saya ada. Perhatikan, sebelum anda menghapus helaian, anda ingin melakukan DisplayAlerts = False, jika tidak, ia terus bertanya kepada anda, "Hai, anda tidak akan mendapatkan kembali helaian itu." Saya faham. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita boleh melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tiada makro. Dan kemudian Tutup - perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.betul? Oleh itu, setelah saya mempunyai DeleteMe di luar sana, saya membukanya, memberikannya kepada WBN, melakukan perkara yang perlu saya lakukan, menyingkirkan semua helaian tambahan - Saya tahu apa yang saya ada. Perhatikan, sebelum anda menghapus helaian, anda ingin melakukan DisplayAlerts = False, jika tidak, ia terus bertanya kepada anda, "Hai, anda tidak akan mendapatkan kembali helaian itu." Saya faham. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita dapat melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tiada makro. Dan kemudian Tutup - perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.betul? Oleh kerana sekarang saya mempunyai DeleteMe di luar sana, saya membukanya, memberikannya kepada WBN, melakukan perkara-perkara yang perlu saya lakukan, menyingkirkan semua helaian tambahan - Saya tahu apa yang saya ada. Perhatikan, sebelum anda menghapus helaian, anda ingin melakukan DisplayAlerts = False, jika tidak, ia terus bertanya kepada anda, "Hai, anda tidak akan mendapatkan kembali helaian itu." Saya faham. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN yang akan menjadi Apple.xlsx, dan kemudian kita dapat melakukan WBN.SaveAs Apple, sebagai Open XMLWorkbook. Tiada makro. Dan kemudian Tutup - perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.tidak akan mendapatkan kembali lembaran. "Saya mendapatkannya. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita dapat melakukan WBN. Simpan sebagai Apple, sebagai Open XMLWorkbook. Tidak ada makro Dan kemudian Tutup-- perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.tidak akan mendapatkan kembali lembaran. "Saya mendapatkannya. Dan kemudian, akhirnya di sini, pilih lembaran kerja pertama FN akan menjadi Apple.xlsx, dan kemudian kita dapat melakukan WBN. Simpan sebagai Apple, sebagai Open XMLWorkbook. Tidak ada makro Dan kemudian Tutup-- perkara yang indah mengenai Tutup ialah saya kini kembali ke buku kerja ini, 2213.

Baiklah, ia telah berfungsi dengan sangat baik, dan kunci untuk keseluruhan perkara ini adalah SaveCopyAs - SaveCopyAs. Jadi, bagi saya-- memang sudah lama wujud - saya tidak pernah menggunakannya, dan sekarang saya menyedari mungkin ada banyak kali di masa lalu di mana saya semestinya menggunakannya. Dan mungkin, anda tahu, anda harus menggunakannya atau mempertimbangkan untuk menggunakannya juga.

Baiklah, saya lupa menyebut satu perkara: yang penting adalah dengan Save As Copy-- Save As Copy-- jadi ketika saya melakukan Save As Copy, jika saya cuba menukar ke jenis fail xslx, saya tidak dapat menukar fail ketik di sini hanya dengan menukar pelanjutan di NewFN dan ketika cuba membuka buku kerja berikutnya, mereka akan mengesan bahawa ia mempunyai makro, dan ia mempunyai pelanjutan yang salah, dan ia akan berteriak kepada anda. Betul? Jadi, anda harus menyimpannya sebagai xlsm dan kemudian kembali, buka semula, dan simpan sebagai xlsx. Tetapi semuanya berfungsi dengan makro ini.

Jadi, hei, semasa saya mengemas kini buku ini, Excel 2016, musim panas ini, untuk Excel 2019, saya akan memastikan memasukkan tip ini. Saya fikir ia adalah petua berguna untuk SaveCopyAs.

Penutup mulai hari ini: Anda mahu VBA menulis beberapa salinan buku kerja semasa; Simpan Sebagai menimbulkan masalah kerana buku kerja asal tidak lagi dibuka; sebaliknya anda menggunakan .SaveAsCopy untuk menyimpan salinan buku kerja. Sekiranya anda ingin memuat turun buku kerja dari video hari ini, termasuk makro, lawati URL dalam keterangan YouTube.

Saya ingin anda berhenti, saya akan berjumpa anda di lain kali untuk siaran net lain dari.

Muat turun Fail Excel

Untuk memuat turun fail excel: save-as-keep-original-open.xlsm

Pemikiran Excel Hari Ini

Saya telah meminta nasihat rakan Excel saya mengenai Excel. Pemikiran hari ini untuk merenungkan:

"Tarikh adalah angka, bukan perkataan."

Duane Aubin

Artikel menarik...