VBA Izračunaj - zdaj, delovni zvezek, delovni list ali obseg

Ta vadnica vas bo naučila vseh različnih možnosti izračuna v VBA.

Excel privzeto izračuna vse odprte delovne zvezke vsakič, ko se spremeni delovni zvezek. To stori tako, da sledi izračunskemu drevesu, kjer ob spremembi celice A1 posodobi vse celice, ki se zanašajo na celico A1 itd. Vendar lahko to povzroči zagon vaše kode VBA izredno počasi, kot mora vsakič, ko se celica spremeni, mora Excel znova izračunati.

Če želite povečati hitrost VBA, boste na začetku postopkov pogosto želeli onemogočiti samodejne izračune:

1 Application.Calculation = xlPriročnik

in ga na koncu znova omogočite:

1 Application.Calculation = xlAutomatic

Kaj pa, če želite v svojem postopku izračunati vse (ali del) svojih delovnih zvezkov? Preostanek te vadnice vas bo naučil, kaj storiti.

Izračunaj zdaj

Z ukazom Izračun lahko znova izračunate vse (v vseh odprtih delovnih zvezkih):

1 Izračunaj

To je običajno najboljša metoda za uporabo. Za boljšo hitrost pa lahko izvedete tudi ozke izračune.

Izračunajte samo list

VBA lahko tudi poveste, naj izračuna samo določen list.

Ta koda bo ponovno izračunala aktivni list:

1 ActiveSheet.Calculate

Ta koda bo ponovno izračunala Sheet1:

1 Listi ("List1"). Izračunajte

Izračunaj obseg

Če potrebujete bolj ozek izračun, lahko VBA poveste, naj izračuna samo obseg celic:

1 Listi ("List1"). Razpon ("a1: a10"). Izračunajte

Izračunajte individualno formulo

Ta koda bo izračunala samo formulo posamezne celice:

1 Razpon ("a1"). Izračunajte

Izračunajte delovni zvezek

Ni možnosti VBA za izračun samo celotnega delovnega zvezka. Če morate izračunati celoten delovni zvezek, je najboljša možnost uporaba ukaza Izračunaj:

1 Izračunaj

Tako se izračunajo vsi odprti delovni zvezki. Če vas res skrbi hitrost in želite izračunati celoten delovni zvezek, boste morda lahko bolj selektivni glede tega, kateri delovni zvezki so naenkrat odprti.

Izračunajte delovni zvezek - metode, ki ne delujejo

Obstaja nekaj načinov, ki jih boste morda zamikali, da bi prisilili VBA, da izračuna le delovni zvezek, vendar nobeden od njih ne bo deloval pravilno.

Ta koda se bo pomikala po vsakem delovnem listu v delovnem zvezku in ponovno izračunala liste enega za drugim:

1234567 Sub Recalculate_Workbook ()Zatemni kot delovni listZa vsak ws na delovnih listihws. IzračunajNaslednji wsEnd Sub

Ta koda bo dobro delovala, če so vsi vaši delovni listi "samostojni", kar pomeni, da noben od vaših listov ne vsebuje izračunov, ki se nanašajo na druge liste.

Če pa se vaši delovni listi nanašajo na druge liste, se vaši izračuni morda ne bodo pravilno posodobili. Na primer, če izračunate Sheet1 pred Sheet2, vendar se formule Sheet1 opirajo na izračune v Sheet2, potem vaše formule ne bodo vsebovale najnovejših vrednosti.

Poskusite lahko tudi izbrati vse liste hkrati in izračunati delovni list:

12 ThisWorkbook.Sheets.SelectActiveSheet.Calculate

Vendar bo to povzročilo isto težavo.

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave