Czy istnieje sposób, aby ograniczyć do jakiego stopnia wykorzystanie procesora Excel ma dostęp podczas działania? Mam skrypt VBA, który oblicza kilka formuł gigantycznej tablicy. Całe obliczenie zajmuje około 20 minut przy użyciu 100% mojego procesora, ale nie mogę w tym czasie korzystać z mojego komputera i wolałbym, aby działał w tle przy około 50% użycia procesora, dzięki czemu mogę kontynuować inne rzeczy. Jakieś sugestie?
Mój system operacyjny to Windows 7 Enterprise 64-bit, a wersja Excel to 2007-32 bit
windows-7
worksheet-function
microsoft-excel-2007
vba
learningAsIGo
źródło
źródło
Odpowiedzi:
Jeśli funkcja VBA jest wywoływana z kilku formuł lub jeśli skrypt generuje lub wymusza ponowne obliczenie kilku formuł, to zdecydowanie powinno skorzystać z funkcji obliczeń wielowątkowych programu Excel. Odpowiednio uruchomiłoby to wiele wystąpień funkcji VBA dla każdej formuły lub ponownie obliczyło wiele komórek jednocześnie, gdy skrypt vba działa w jednym wątku.
Możesz ograniczyć liczbę wątków używanych przez program Excel do ponownego obliczania formuł w Opcjach programu Excel ... Karta Zaawansowane ... sekcja Formuły.
źródło
Zamiast obniżać priorytet, spróbuj zmienić powinowactwo w Menedżerze zadań. Jeśli masz więcej niż 1 procesor, możesz ograniczyć liczbę procesorów używanych przez program Excel. Pozwoli to innym procesorom działać na innych rzeczach.
Kliknij prawym przyciskiem myszy Excel na zakładce Procesy i wybierz Ustaw koligację. Wybierz procesory, w których chcesz uruchomić program Excel.
źródło
Możesz spróbować obniżyć priorytet procesu programu Excel, otwierając menedżera zadań, przechodząc do karty „Szczegóły” lub „Procesy” (w zależności od wersji systemu Windows), klikając prawym przyciskiem myszy proces programu excel.exe i wybierając niższy priorytet. To powinno dać więcej czasu procesorowi na inne procesy.
źródło
Dostępne są funkcje uśpienia i oczekiwania w VBA lub poprzez deklarację. „Nadmiernie uproszczoną zasadą” jest jednak nigdy nie używać funkcji Sleep (). (google „„ nigdy nie używaj funkcji spania () ”)
Strona z dokumentami dotycząca Application.Wait ( https://msdn.microsoft.com/en-us/library/office/ff822851.aspx ). Pamiętaj, że tryb uśpienia i czekania spowoduje, że program Excel przestanie odpowiadać przez określony czas, co może powodować „wraki pociągów” w wycinku czasu.
Jeśli twoje obliczenia obejmują jakąś pętlę, to jednym ze sposobów radzenia sobie z tym do określonego celu (przepadek czasu obliczeniowego dla dostępności procesora) jest utworzenie specjalnej własnej funkcji oczekiwania, która na przykład zapętla DoEvent () na 1 sekundę i następnie wraca.
DoEvents w zasadzie mówi Twojemu kodowi / tłumaczowi, aby poświęcił czas na system operacyjny itp. Z pewnością spowoduje to, że Twój kod zajmie więcej czasu. Może także pozwolić ci edytować arkusz podczas trwania obliczeń, więc twój przebieg może się różnić. Test.
Zobacz na przykład https://stackoverflow.com/questions/469347/is-there-an-equivalent-to-thread-sleep-in-vba
źródło
Kilka lat temu zadano podobne pytanie, które ma rozwiązanie: Czy istnieją rozwiązania, które mogą ograniczyć użycie procesora przez proces?
Process Tamer działa w systemie Windows 7. http://www.donationcoder.com/Software/Mouser/proctamer/
źródło
Miałem ten sam problem, gdy mój laptop miał 4 GB pamięci. Gdy tylko zaktualizowałem go do 16 GB, problem ustąpił. Kolejne możliwe rozwiązanie.
źródło
Dodaj następujące 2 wiersze gdzieś na początku makra:
I te 2 linie pod koniec:
Będzie wtedy miał mniej pracy do zrobienia, gdy będziesz robić coś innego.
źródło
Jeśli korzystasz z biura 32bi w 64-bitowym systemie operacyjnym, powinieneś użyć tej aplikacji: http://www.ntcore.com/4gb_patch.php
Ta aplikacja umożliwi Excela lub dowolne inne biuro 32-bitowe do korzystania z mo
źródło
Użyj OpenOffice lub LibreOffice: jego moc skryptowa jest znacznie bardziej efektywna niż MS, i możesz dosłownie mieć „przepustnicę” w swoich obliczeniach.
EDYCJA: Dlaczego głosować negatywnie? spójrz na instrukcję i przekonaj się sam. Na przykład możesz przekonwertować swoje obliczenia na Javę i być w porządku z całą dławiącą mocą JVM.
źródło