Lembaran Pintar 9.1.1
Smartsheet ialah platform kerja dinamik yang membolehkan anda mengurus projek, membina aliran kerja dan bekerjasama dengan pasukan anda.
Apabila makro Excel anda menjadi semakin mantap dan kompleks, anda mungkin mendapati bahawa ia kehilangan prestasi. Apabila membincangkan makro, perkataan prestasi biasanya sinonim dengan kelajuan . Kelajuan ialah seberapa cepat prosedur VBA anda melaksanakan tugas yang dimaksudkan. Berikut ialah sepuluh cara untuk membantu memastikan makro Excel anda berjalan pada tahap prestasi optimumnya.
Adakah anda tahu bahawa setiap kali sel yang mempengaruhi sebarang formula dalam hamparan anda ditukar atau dimanipulasi, Excel mengira semula keseluruhan lembaran kerja? Dalam lembaran kerja yang mempunyai sejumlah besar formula, tingkah laku ini boleh memperlahankan makro anda secara drastik.
Anda boleh menggunakan sifat Application.Calculation untuk memberitahu Excel untuk bertukar kepada mod pengiraan manual. Apabila buku kerja berada dalam mod pengiraan manual, buku kerja tidak akan mengira semula sehingga anda mencetuskan pengiraan secara eksplisit dengan menekan kekunci F9.
Letakkan Excel ke dalam mod pengiraan manual, jalankan kod anda, dan kemudian tukar semula ke mod pengiraan automatik.
Sub Makro1() Permohonan.Pengiraan = xlManual Pengiraan 'Letakkan kod makro anda di sini Permohonan.Pengiraan = xlPengiraanAutomatik Tamat Sub
Menetapkan mod pengiraan kembali kepada xlCalculationAutomatic secara automatik akan mencetuskan pengiraan semula lembaran kerja, jadi tidak perlu menekan kekunci F9 selepas makro anda berjalan.
Anda mungkin perasan bahawa apabila makro anda dijalankan, skrin anda berkelipan agak banyak. Kelipan ini ialah Excel cuba melukis semula skrin untuk menunjukkan keadaan semasa lembaran kerja. Malangnya, setiap kali Excel melukis semula skrin, ia mengambil sumber memori.
Anda boleh menggunakan sifat Application.ScreenUpdating untuk melumpuhkan kemas kini skrin sehingga makro anda selesai. Melumpuhkan pengemaskinian skrin menjimatkan masa dan sumber, membolehkan makro anda berjalan lebih pantas sedikit. Selepas kod makro anda selesai dijalankan, anda boleh menghidupkan semula pengemaskinian skrin.
Sub Makro1() Permohonan.Pengiraan = xlManual Pengiraan Aplikasi.ScreenUpdating = Palsu 'Letakkan kod makro anda di sini Permohonan.Pengiraan = xlPengiraanAutomatik Aplikasi.ScreenUpdating = Benar Tamat Sub
Selepas anda menetapkan sifat ScreenUpdating kembali kepada True, Excel akan mencetuskan lukisan semula skrin secara automatik.
Bar status Excel, yang muncul di bahagian bawah tetingkap Excel, biasanya memaparkan kemajuan tindakan tertentu dalam Excel. Jika makro anda berfungsi dengan banyak data, bar status akan menggunakan beberapa sumber.
Adalah penting untuk ambil perhatian bahawa mematikan pengemaskinian skrin adalah berasingan daripada mematikan paparan bar status. Bar status akan terus dikemas kini walaupun anda melumpuhkan pengemaskinian skrin. Anda boleh menggunakan sifat Application.DisplayStatusBar untuk melumpuhkan sementara sebarang kemas kini bar status, meningkatkan lagi prestasi makro anda:
Sub Makro1() Permohonan.Pengiraan = xlManual Pengiraan Aplikasi.ScreenUpdating = Palsu Application.DisplayStatusBar = Palsu 'Letakkan kod makro anda di sini Permohonan.Pengiraan = xlPengiraanAutomatik Aplikasi.ScreenUpdating = Benar Application.DisplayStatusBar = Benar Tamat Sub
Anda boleh melaksanakan makro sebagai prosedur acara, memberitahu Excel untuk menjalankan kod tertentu apabila lembaran kerja atau buku kerja berubah.
Kadangkala, makro standard membuat perubahan yang akan mencetuskan prosedur acara. Sebagai contoh, jika anda mempunyai makro standard yang memanipulasi beberapa sel pada Helaian1, setiap kali sel pada helaian itu ditukar, makro anda perlu menjeda semasa acara Worksheet_Change berjalan.
Anda boleh menambah satu lagi tahap peningkatan prestasi dengan menggunakan sifat EnableEvents untuk memberitahu Excel supaya mengabaikan acara semasa makro anda berjalan.
Tetapkan sifat EnableEvents kepada False sebelum menjalankan makro anda. Selepas kod makro anda selesai dijalankan, anda boleh menetapkan sifat EnableEvents kembali kepada Benar.
Sub Makro1() Permohonan.Pengiraan = xlManual Pengiraan Aplikasi.ScreenUpdating = Palsu Application.DisplayStatusBar = Palsu Application.EnableEvents = Palsu 'Letakkan kod makro anda di sini Permohonan.Pengiraan = xlPengiraanAutomatik Aplikasi.ScreenUpdating = Benar Application.DisplayStatusBar = Benar Application.EnableEvents = Benar Tamat Sub
Setiap kali makro anda mengubah suai bilangan baris, mengubah suai bilangan lajur atau mengubah persediaan halaman lembaran kerja, Excel terpaksa mengambil masa mengira semula pemisah halaman yang ditunjukkan pada helaian.
Anda boleh mengelakkan tingkah laku ini dengan hanya menyembunyikan pemisah halaman sebelum memulakan makro anda.
Tetapkan sifat helaian DisplayPageBreaks kepada False untuk menyembunyikan pemisah halaman. Jika anda ingin terus memaparkan pemisah halaman selepas makro anda dijalankan, tetapkan sifat helaian DisplayPageBreaks kembali kepada Benar.
Sub Makro1() Permohonan.Pengiraan = xlManual Pengiraan Aplikasi.ScreenUpdating = Palsu Application.DisplayStatusBar = Palsu Application.EnableEvents = Palsu Activesheet.DisplayPageBreaks = Palsu 'Letakkan kod makro anda di sini Permohonan.Pengiraan = xlPengiraanAutomatik Aplikasi.ScreenUpdating = Benar Application.DisplayStatusBar = Benar Application.EnableEvents = Benar Activesheet.DisplayPageBreaks = Benar Tamat Sub
Jika makro anda memanipulasi jadual pangsi yang mengandungi sumber data yang besar, anda mungkin mengalami prestasi yang lemah apabila melakukan perkara seperti menambah atau mengalihkan medan pangsi secara dinamik.
Anda boleh meningkatkan prestasi makro anda dengan menggantung pengiraan semula jadual pangsi sehingga semua perubahan medan pangsi telah dibuat. Hanya tetapkan harta PivotTable.ManualUpdate kepada True untuk menangguhkan pengiraan semula, jalankan kod makro anda dan kemudian tetapkan harta PivotTable.ManualUpdate kembali kepada False untuk mencetuskan pengiraan semula.
Sub Makro1() ActiveSheet.PivotTables("PivotTable1").ManualUpdate=True 'Letakkan kod makro anda di sini ActiveSheet.PivotTables("PivotTable1").ManualUpdate=False Tamat Sub
Adalah penting untuk diingat bahawa walaupun Perakam Makro menjimatkan masa dengan menulis kod VBA untuk anda, ia tidak selalu menulis kod yang paling cekap. Contoh utama ialah cara Perakam Makro menangkap sebarang tindakan salin dan tampal yang anda lakukan semasa merakam.
Anda boleh memberikan makro anda sedikit rangsangan dengan memotong orang tengah dan melakukan salinan terus dari satu sel ke sel destinasi. Kod ganti ini menggunakan argumen Destinasi untuk memintas papan keratan dan menyalin kandungan sel A1 terus ke sel B1.
Julat("A1"). Salin Destinasi:=Julat("B1")
Jika anda perlu menyalin nilai sahaja (bukan pemformatan atau formula), anda boleh meningkatkan prestasi dengan lebih baik dengan mengelakkan kaedah Salin semuanya. Hanya tetapkan nilai sel destinasi kepada nilai yang sama yang terdapat dalam sel sumber. Kaedah ini adalah kira-kira 25 kali lebih pantas daripada menggunakan kaedah Salin:
Julat("B1").Nilai = Julat("A1").Nilai
Jika anda perlu menyalin hanya formula dari satu sel ke sel lain (bukan nilai atau pemformatan), anda boleh menetapkan formula sel destinasi kepada formula yang sama yang terkandung dalam sel sumber:
Julat("B1").Formula = Julat("A1").Formula
Apabila merakam makro, anda selalunya akan memanipulasi objek yang sama lebih daripada sekali. Anda boleh menjimatkan masa dan meningkatkan prestasi dengan menggunakan pernyataan Dengan untuk melakukan beberapa tindakan pada objek tertentu dalam satu pukulan.
Pernyataan Dengan yang digunakan dalam contoh berikut memberitahu Excel untuk menggunakan semua perubahan pemformatan pada satu masa:
Dengan Julat("A1").Fon .Berani = Benar .Italik = Benar .Garis bawah = xlUnderlineStyleSingle Tamat Dengan
Membiasakan diri menggunting tindakan ke dalam pernyataan With bukan sahaja memastikan makro anda berjalan lebih pantas tetapi juga memudahkan anda membaca kod makro anda.
Perakam Makro gemar menggunakan kaedah Pilih untuk memilih objek secara eksplisit sebelum mengambil tindakan ke atasnya. Secara umumnya tidak perlu memilih objek sebelum bekerja dengannya. Malah, anda boleh meningkatkan prestasi makro secara mendadak dengan tidak menggunakan kaedah Pilih.
Selepas merakam makro anda, biasakan mengubah kod yang dijana untuk mengalih keluar kaedah Pilih. Dalam kes ini, kod yang dioptimumkan akan kelihatan seperti berikut:
Helaian("Helaian1"). Julat("A1").FormulaR1C1 = "1000" Helaian("Helaian2"). Julat("A1").FormulaR1C1 = "1000" Helaian("Helaian3"). Julat("A1").FormulaR1C1 = "1000"
Ambil perhatian bahawa tiada apa yang sedang dipilih. Kod ini hanya menggunakan hierarki objek untuk menggunakan tindakan yang diperlukan.
Satu lagi cara untuk mempercepatkan makro anda ialah mengehadkan jumlah kali anda merujuk data lembaran kerja dalam kod anda. Ia sentiasa kurang cekap untuk merebut data dari lembaran kerja berbanding dari memori. Maksudnya, makro anda akan berjalan lebih pantas jika mereka tidak perlu berulang kali berinteraksi dengan lembaran kerja.
Sebagai contoh, kod mudah berikut memaksa VBA untuk terus kembali ke Helaian("Helaian1"). Julat("A1") untuk mendapatkan nombor yang diperlukan untuk perbandingan yang dilakukan dalam pernyataan Jika:
Untuk ReportMonth = 1 Hingga 12 Jika Julat("A1").Nilai = LaporanBulan Kemudian MsgBox 1000000 / Bulan Laporan Tamat Jika Bulan Laporan Seterusnya
Kaedah yang lebih cekap ialah menyimpan nilai dalam Helaian("Helaian1").Julat("A1") kepada pembolehubah yang dipanggil Bulan Saya. Dengan cara ini, kod merujuk pembolehubah MyMonth dan bukannya lembaran kerja:
Malapkan MyMonth sebagai Integer MyMonth = Julat("A1").Nilai Untuk ReportMonth = 1 Hingga 12 Jika MyMonth = ReportMonth Kemudian MsgBox 1000000 / Bulan Laporan Tamat Jika Bulan Laporan Seterusnya
Pertimbangkan untuk memanfaatkan pembolehubah untuk berfungsi dengan data dalam ingatan berbanding merujuk terus lembaran kerja.
Apabila memanggil kaedah atau sifat objek, ia perlu melalui antara muka IDispatch komponen OLE. Panggilan ke komponen OLE ini mengambil masa, jadi mengurangkan bilangan rujukan kepada komponen OLE boleh meningkatkan kelajuan kod makro.
Untuk penyebutan sifat atau kaedah objek, kaedah perwakilan Object.Method biasanya digunakan, iaitu, "." simbol digunakan untuk memanggil sifat dan kaedah.
Oleh itu, bilangan kaedah atau panggilan harta boleh dinilai mengikut bilangan simbol ".". Semakin kurang "." simbol, lebih cepat kod berjalan.
Sebagai contoh pernyataan berikut mengandungi 3 simbol ".".
ThisWorkbook.Sheet1.Range("A1").Value = 100
Pernyataan berikut hanya mempunyai satu simbol ".".
Activewindow.Top = 100
Berikut ialah beberapa helah untuk mengurangkan bilangan simbol "." untuk berlari lebih laju.
Pertama, apabila anda perlu merujuk kepada objek yang sama berulang kali, anda boleh menetapkan objek kepada pembolehubah untuk mengurangkan bilangan panggilan. Sebagai contoh, kod berikut memerlukan dua panggilan setiap talian.
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300
Oleh kerana objek Sheets("Sheet1") perlu dirujuk berulang kali, ia boleh ditetapkan kepada pembolehubah sht terlebih dahulu, supaya setiap kod hanya perlu dipanggil sekali.
Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300
Kedua, jika anda tidak mahu mengisytiharkan pembolehubah sementara sht, anda juga boleh menggunakan pernyataan Dengan yang dinyatakan sebelum ini. Seperti yang ditunjukkan dalam contoh berikut:
With ThisWorkbook.Sheets("Sheet1")
.Cells(1, 1) = 100
.Cells(2, 1) = 200
.Cells(3, 1) = 300
End With
Ketiga, apabila terdapat banyak gelung, cuba simpan sifat dan kaedah di luar gelung. Apabila menggunakan semula nilai sifat objek yang sama dalam gelung, anda boleh mula-mula menetapkan nilai sifat kepada pembolehubah yang ditentukan di luar gelung, dan kemudian menggunakan pembolehubah dalam gelung, yang boleh mencapai kelajuan yang lebih pantas. Seperti yang ditunjukkan dalam contoh berikut:
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i
Setiap gelung dalam contoh ini mendapat sifat Nilai sel Sel(1,2). Jika anda memperuntukkan sifat Nilai Sel(1.2) kepada pembolehubah sebelum gelung bermula, anda akan mendapat larian yang lebih pantas. Seperti yang ditunjukkan dalam contoh berikut:
tmp = Cells(1, 2).Value
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i
Kod di atas memanggil ThisWorkbook.Sheets("Sheet1") setiap kali ia gelung. Anda boleh melakukan ini dengan lebih pantas dengan menggunakan pernyataan Dengan untuk mengalihkan panggilan ke ThisWorkbook.Sheets("Sheet1") di luar gelung. Seperti yang ditunjukkan dalam contoh berikut:
tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
For i = 1 To 1000
.Cells(1, 1) = tmp
.Cells(2, 1) = tmp
.Cells(3, 1) = tmp
Next i
End With
Pemula biasanya lebih suka menggunakan pembolehubah jenis Varian, yang mempunyai kelebihan menjadi kurang rumit kerana sebarang jenis data boleh digunakan tanpa masalah limpahan memori jika data terlalu besar untuk jenis data Integer atau Long. Walau bagaimanapun, data jenis Varienmt memerlukan lebih banyak ruang memori tambahan daripada jenis yang ditentukan lain (2 bait untuk data Integer, 4 bait untuk data Panjang dan 16 bait untuk data Varian), VBA memerlukan lebih banyak masa untuk memproses data jenis Varian daripada jenis lain yang ditentukan daripada data. Seperti yang ditunjukkan oleh contoh berikut.
Sub VariantTest()
Dim i As Long
Dim ix As Integer, iy As Integer, iz As Integer
Dim vx As Variant, vy As Variant, vz As Variant
Dim tm As Date
vx = 100: vy = 50
tm = Timer
For i = 1 To 1000000
vz = vx * vy
vz = vx + vy
vz = vx - vy
vz = vx / vy
Next i
Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
ix = 100: iy = 50
tm = Timer
For i = 1 To 1000000
iz = ix * iy
iz = ix + iy
iz = ix - iy
iz = ix / iy
Next i
Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
Dalam kod di atas, baris 8 hingga 13 melakukan 1 juta operasi penambahan, penolakan, pendaraban dan pembahagian pembolehubah Varian, dan baris 17 hingga 22 melakukan 1 juta operasi penambahan, penolakan, pendaraban dan pembahagian pembolehubah Integer. Pada komputer saya, pengendalian pembolehubah Varian mengambil masa kira-kira 0.09375 saat, manakala pengendalian pembolehubah Integer mengambil masa kira-kira 0.03125 saat. Hasilnya mungkin berbeza dari satu komputer ke komputer, tetapi Pembolehubah Varian adalah lebih perlahan daripada pembolehubah Integer .
Atas sebab ini, adalah disyorkan untuk mengelak daripada menggunakan pembolehubah Varian apabila anda boleh menggunakan jenis data yang ditentukan secara eksplisit .
Smartsheet ialah platform kerja dinamik yang membolehkan anda mengurus projek, membina aliran kerja dan bekerjasama dengan pasukan anda.
SharePoint ialah sistem kerjasama berasaskan web yang menggunakan pelbagai aplikasi aliran kerja, pangkalan data "senarai" dan komponen web lain, serta ciri keselamatan untuk memberi kawalan kepada Kumpulan perniagaan bekerjasama.
Kalendar Van Nien ialah aplikasi melihat kalendar pada telefon anda, membantu anda melihat tarikh lunisolar dengan cepat pada telefon anda, sekali gus mengatur kerja penting anda.
Microsoft Outlook ialah aplikasi perniagaan dan produktiviti yang dibangunkan oleh Microsoft Corporation.
ClickUp ialah salah satu platform produktiviti yang dinilai tertinggi untuk mana-mana perniagaan. Perniagaan besar seperti Google, Booking.com, San Diego Padres dan Uber semuanya menggunakan ClickUp untuk meningkatkan produktiviti tempat kerja.
PDF telah menjadi format yang biasa digunakan untuk membaca, mencipta dan menghantar dokumen teks. Seterusnya, terdapat peningkatan dalam bilangan program yang digunakan untuk jenis dokumentasi ini. PDF-XChange Viewer ialah antara jumlah penonton PDF yang semakin meningkat.
Apache OpenOffice menawarkan suite lengkap aplikasi Office yang menyaingi Microsoft 365, terutamanya dalam Excel, PowerPoint dan Word. Ia membolehkan anda mengurus projek anda dengan lebih berkesan, dan menyokong beberapa format fail.
Perisian iTaxViewer ialah perisian membaca fail XML yang paling popular hari ini. Perisian ini adalah aplikasi untuk membaca pengisytiharan cukai elektronik dalam format XML Jabatan Percukaian Am.
Nitro PDF Reader ialah editor PDF berguna yang merangkumi semua tugas asas yang kebanyakan orang lakukan setiap hari dengan dokumen PDF.
Foxit Reader terutamanya pembaca PDF, dan juga membolehkan anda membuat fail PDF, menandatanganinya, mengeditnya dan menambah anotasi. Ia berfungsi pada sistem pengendalian, terdapat pemalam untuk pelbagai program daripada pakej Microsoft Office.