Apakah ada cara untuk membatasi berapa banyak penggunaan CPU yang dapat diakses oleh excel? Saya memiliki skrip VBA yang menghitung sekelompok rumus array raksasa. Seluruh perhitungan mungkin memakan waktu 20 menit menggunakan 100% dari CPU saya, tetapi saya tidak dapat menggunakan mesin saya selama ini dan lebih suka menjalankannya di latar belakang seperti 50% penggunaan CPU sehingga saya dapat terus melakukan hal-hal lain. Ada saran?
OS saya adalah Windows 7 Enterprise 64-bit dan versi Excel 2007-32 bit
windows-7
worksheet-function
microsoft-excel-2007
vba
belajar Asigo
sumber
sumber
Jawaban:
Jika fungsi VBA dipanggil dari beberapa rumus atau jika skrip Anda menghasilkan atau memaksa penghitungan ulang beberapa rumus, maka ini pasti harus menggunakan fitur perhitungan multi-threaded Excel. Masing-masing, ini akan menjalankan beberapa contoh fungsi VBA Anda untuk setiap formula, atau menghitung ulang beberapa sel secara bersamaan saat skrip vba Anda berjalan di satu utas.
Anda dapat membatasi jumlah utas yang digunakan oleh Excel untuk menghitung ulang rumus di Opsi Excel ... Tab Lanjut ... bagian Rumus.
sumber
Alih-alih menurunkan prioritas, coba ubah afinitas di Task Manager. Jika Anda memiliki lebih dari 1 CPU, Anda dapat membatasi jumlah CPU yang akan digunakan Excel. Ini akan membebaskan CPU lain untuk mengerjakan hal-hal lain.
Klik kanan Excel di tab Processes dan pilih Set Affinity. Pilih CPU di mana Anda ingin Excel dijalankan.
sumber
Anda dapat mencoba menurunkan prioritas proses excel, dengan menemukan membuka task manager, beralih ke tab "Detail" atau "Proses" (tergantung pada versi Windows Anda), mengklik kanan pada proses excel.exe, dan memilih prioritas yang lebih rendah. Ini akan memberi lebih banyak waktu CPU untuk proses lain.
sumber
Ada fungsi Tidur dan Tunggu yang tersedia di VBA atau melalui deklarasi. Namun, "aturan praktis yang terlalu sederhana" adalah untuk tidak pernah menggunakan Sleep (). (google '"never use sleep ()" programming')
Halaman dokumen untuk Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Perhatikan bahwa Tidur dan Tunggu akan menyebabkan Excel menjadi tidak responsif selama durasi yang Anda tentukan dan ini dapat menyebabkan irisan waktu "kereta bangkai."
Jika perhitungan Anda melibatkan semacam loop, maka salah satu cara untuk menangani ini untuk tujuan spesifik Anda (waktu perhitungan hangus untuk ketersediaan CPU) adalah dengan membuat fungsi tunggu khusus Anda sendiri, misalnya, loop DoEvents () selama 1 detik dan lalu kembali.
DoEvents pada dasarnya memberi tahu kode / juru bahasa Anda untuk memberikan waktu untuk OS, dll. Ini pasti akan menyebabkan kode Anda lebih lama. Mungkin juga Anda dapat mengedit lembar kerja saat perhitungan sedang berlangsung, sehingga jarak tempuh Anda mungkin berbeda. Uji.
Lihat, misalnya, https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba
sumber
Sebuah questin serupa ditanyakan beberapa tahun lalu yang memiliki solusi: Apakah ada solusi yang dapat membatasi penggunaan CPU dari suatu proses?
Process Tamer berfungsi untuk Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/
sumber
Saya memiliki masalah yang sama ketika laptop saya memiliki memori 4GB. Segera setelah saya ditingkatkan ke 16GB, masalahnya berhenti. Hanya solusi lain yang mungkin.
sumber
Tambahkan 2 baris berikut di suatu tempat di dekat awal makro Anda:
Dan 2 baris ini mendekati akhir:
Maka akan lebih sedikit pekerjaan yang harus dilakukan saat Anda melakukan sesuatu yang lain.
sumber
Jika Anda menggunakan kantor 32bi dalam OS 64bit, Anda harus menggunakan aplikasi ini: http://www.ntcore.com/4gb_patch.php
Aplikasi ini akan memungkinkan excel atau kantor 32bit lainnya untuk menggunakan mo
sumber
Gunakan OpenOffice atau LibreOffice: kekuatan skripnya jauh lebih efektif daripada MS, dan Anda benar-benar dapat memiliki "throttle" dalam perhitungan Anda.
EDIT: Mengapa downvote? lihat manual dan lihat sendiri. Anda dapat mengubah perhitungan Anda menjadi Java dan baik - baik saja dengan semua kekuatan pelambatan JVM, misalnya.
sumber