VBA Изчисляване - сега, работна книга, работен лист или диапазон

Този урок ще ви научи на всички различни опции за изчисляване във VBA.

По подразбиране Excel изчислява всички отворени работни книги всеки път, когато се извърши промяна на работна книга. Той прави това, като следва дърво за изчисления, където ако клетката A1 се промени, тя актуализира всички клетки, които разчитат на клетка A1 и т.н. Това обаче може да доведе до стартиране на вашия VBA код изключително бавно, както всеки път, когато дадена клетка се промени, Excel трябва да преизчисли отново.

За да увеличите скоростта на VBA, често ще искате да деактивирате автоматичните изчисления в началото на вашите процедури:

1 Application.Calculation = xlManual

и го активирайте отново в края:

1 Приложение.Изчисляване = xlАвтоматично

Какво обаче, ако искате да изчислите всички (или част) от работните си книги в рамките на вашата процедура? Останалата част от този урок ще ви научи какво да правите.

Изчислете сега

Можете да използвате командата Изчисляване, за да преизчислите всичко (във всички отворени работни книги):

1 Изчисли

Обикновено това е най -добрият метод за използване. Можете обаче да извършвате и по -тесни изчисления за подобрена скорост.

Изчисляване само на лист

Можете също да кажете на VBA да изчислява само определен лист.

Този код ще преизчисли активния лист:

1 ActiveSheet.Calculate

Този код ще преизчисли Sheet1:

1 Листове ("Лист1"). Изчислете

Изчислете обхвата

Ако имате нужда от по -тясно изчисление, можете да кажете на VBA да изчислява само диапазон от клетки:

1 Листове ("Лист1"). Обхват ("a1: a10"). Изчислете

Изчислете индивидуална формула

Този код ще изчисли само отделна клетъчна формула:

1 Обхват ("a1"). Изчислете

Изчислете работна книга

Няма опция VBA да се изчисли само цяла работна книга. Ако трябва да изчислите цяла работна книга, най -добрият вариант е да използвате командата Изчисляване:

1 Изчисли

Това ще изчисли всички отворени работни книги. Ако наистина сте загрижени за скоростта и искате да изчислите цяла работна книга, може да сте по -избирателни кои работни книги са отворени наведнъж.

Изчислете работна книга - методи, които не работят

Има няколко метода, които може да се изкушите да използвате, за да принудите VBA да изчисли само работна книга, но никой от тях няма да работи правилно.

Този код ще премине през всеки работен лист в работната книга и ще преизчисли листовете един по един:

1234567 Sub Recalculate_Workbook ()Затъмнете като работен листЗа всеки ws в работни листовеws.ИзчислетеСледващата wsEnd Sub

Този код ще работи добре, ако всичките ви работни листове са „самостоятелни“, което означава, че нито един от вашите листове не съдържа изчисления, които се отнасят до други листове.

Ако обаче работните ви листове се отнасят до други листове, изчисленията ви може да не се актуализират правилно. Например, ако изчислявате Sheet1 преди Sheet2, но формулите на Sheet1 разчитат на изчисления, направени в Sheet2, тогава вашите формули няма да съдържат най-актуалните стойности.

Можете също да опитате да изберете всички листове наведнъж и да изчислите активния лист:

12 ThisWorkbook.Sheets.SelectActiveSheet.Calculate

Това обаче ще предизвика същия проблем.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave