Ez az oktatóanyag megtanítja a VBA különböző számítási lehetőségeit.
Alapértelmezés szerint az Excel minden nyitott munkafüzetet kiszámít minden munkafüzet módosításkor. Ezt úgy hajtja végre, hogy követ egy számítási fát, ahol az A1 cella módosítása esetén frissíti az összes cellát, amely az A1 cellára és így tovább támaszkodik. Ez azonban a VBA -kód futtatását okozhatja rendkívül lassan, mint minden alkalommal, amikor egy cella megváltozik, az Excelnek újra kell számolnia.
A VBA sebesség növelése érdekében gyakran ki kell kapcsolnia az automatikus számításokat az eljárások elején:
1 | Application.Calculation = xlManual |
és a végén engedélyezze újra:
1 | Alkalmazás. Számítás = xlAutomatikus |
Mi van azonban akkor, ha az összes munkafüzetet (vagy annak egy részét) ki szeretné számítani az eljárás során? Az oktatóanyag többi része megtanítja, mit kell tennie.
Számoljon most
A Calculate paranccsal mindent újra kiszámíthat (minden nyitott munkafüzetben):
1 | Kiszámítja |
Általában ez a legjobb módszer. A jobb sebesség érdekében azonban szűkebb számításokat is végezhet.
Csak a lap kiszámítása
Azt is mondhatja a VBA -nak, hogy csak egy adott lapot számítson ki.
Ez a kód újraszámítja az aktív lapot:
1 | ActiveSheet. Számítás |
Ez a kód újraszámítja az 1. táblázatot:
1 | Táblázatok ("Sheet1"). Számítsa ki |
Tartomány kiszámítása
Ha szűkebb számítást igényel, akkor utasíthatja a VBA -t, hogy csak egy cellatartományt számítson ki:
1 | Táblázatok ("Sheet1"). Tartomány ("a1: a10"). Számítsa ki |
Egyéni képlet kiszámítása
Ez a kód csak az egyes cellák képletét számítja ki:
1 | Tartomány ("a1"). Számítsa ki |
Számítsa ki a munkafüzetet
Nincs VBA lehetőség, hogy csak egy teljes munkafüzetet számítson ki. Ha egy teljes munkafüzetet kell kiszámítania, akkor a legjobb megoldás a Calculate parancs használata:
1 | Kiszámítja |
Ez kiszámítja az összes nyitott munkafüzetet. Ha valóban aggódik a gyorsaság miatt, és egy teljes munkafüzetet szeretne kiszámítani, akkor lehet, hogy szelektívebben választja ki, hogy mely munkafüzetek vannak nyitva egyszerre.
Számítsa ki a munkafüzetet - nem működő módszerek
Van néhány módszer, amelyeket arra kényszeríthet, hogy kényszerítse a VBA -t, hogy csak egy munkafüzetet számítson ki, azonban egyikük sem fog megfelelően működni.
Ez a kód végigmegy a munkafüzet minden munkalapján, és egyenként újraszámítja a lapokat:
1234567 | Újraszámítás_Munkafüzet ()Dim ws munkalapkéntMinden egyes munkalaphozws. Számítsa kiKövetkező wsEnd Sub |
Ez a kód akkor működik jól, ha minden munkalapja „önálló”, vagyis egyik lapja sem tartalmaz olyan számításokat, amelyek más lapokra vonatkoznak.
Ha azonban a munkalapjai más lapokra hivatkoznak, előfordulhat, hogy a számítások nem frissülnek megfelelően. Például, ha a Sheet1-et a Sheet2 előtt számítja ki, de a Sheet1 képletei a Sheet2-ben elvégzett számításokra támaszkodnak, akkor a képletek nem tartalmazzák a legfrissebb értékeket.
Megpróbálhatja egyszerre kiválasztani az összes lapot, és kiszámítani az aktív lapot:
12 | ThisWorkbook.Sheets.SelectActiveSheet. Számítás |
Ez azonban ugyanazt a problémát okozza.