Inteligentny arkusz 9.1.1
Smartsheet to dynamiczna platforma robocza, która umożliwia zarządzanie projektami, tworzenie przepływów pracy i współpracę z zespołem.
Ponieważ makra programu Excel stają się coraz bardziej niezawodne i złożone, może się okazać, że tracą wydajność. W przypadku makr słowo wydajność jest zwykle synonimem szybkości . Szybkość to szybkość, z jaką procedury VBA wykonują zamierzone zadania. Poniżej przedstawiono dziesięć sposobów, aby pomóc utrzymać działanie makr programu Excel na optymalnym poziomie wydajności.
Czy wiesz, że za każdym razem, gdy komórka, która ma wpływ na dowolną formułę w arkuszu kalkulacyjnym, zostanie zmieniona lub zmodyfikowana, program Excel ponownie oblicza cały arkusz? W arkuszach zawierających dużą liczbę formuł takie zachowanie może drastycznie spowolnić działanie makr.
Możesz użyć właściwości Application.Calculation, aby poinformować program Excel, aby przełączył się w tryb obliczania ręcznego. Gdy skoroszyt jest w trybie obliczeń ręcznych, skoroszyt nie zostanie ponownie obliczony, dopóki jawnie nie uruchomisz obliczenia, naciskając klawisz F9.
Umieść program Excel w trybie ręcznego obliczania, uruchom kod, a następnie przełącz się z powrotem do trybu automatycznego obliczania.
Submakro1() Application.Calculation = xlCalculationManual 'Umieść tutaj swój kod makra Aplikacja.Calculation = xlCalculationAutomatic Napis końcowy
Ustawienie trybu obliczania z powrotem na xlCalculationAutomatic automatycznie uruchomi ponowne obliczenie arkusza, więc nie ma potrzeby naciskania klawisza F9 po uruchomieniu makra.
Możesz zauważyć, że po uruchomieniu makr ekran dość mocno migocze. To migotanie oznacza, że program Excel próbuje przerysować ekran, aby pokazać bieżący stan arkusza roboczego. Niestety, za każdym razem, gdy Excel przerysowuje ekran, zajmuje zasoby pamięci.
Możesz użyć właściwości Application.ScreenUpdating, aby wyłączyć aktualizacje ekranu, dopóki makro nie zostanie ukończone. Wyłączenie aktualizacji ekranu oszczędza czas i zasoby, dzięki czemu makro działa trochę szybciej. Po zakończeniu działania kodu makra możesz ponownie włączyć aktualizowanie ekranu.
Submakro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Fałsz 'Umieść tutaj swój kod makra Aplikacja.Calculation = xlCalculationAutomatic Application.ScreenUpdating = Prawda Napis końcowy
Po ustawieniu właściwości ScreenUpdating z powrotem na True, program Excel automatycznie uruchomi przerysowanie ekranu.
Pasek stanu programu Excel, który pojawia się u dołu okna programu Excel, zwykle wyświetla postęp niektórych działań w programie Excel. Jeśli Twoje makro pracuje z dużą ilością danych, pasek stanu zajmie trochę zasobów.
Należy pamiętać, że wyłączenie aktualizacji ekranu jest czymś innym niż wyłączenie wyświetlania paska stanu. Pasek stanu będzie nadal aktualizowany, nawet jeśli wyłączysz aktualizację ekranu. Możesz użyć właściwości Application.DisplayStatusBar, aby tymczasowo wyłączyć wszelkie aktualizacje paska stanu, dodatkowo poprawiając wydajność makra:
Submakro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Fałsz Application.DisplayStatusBar = False 'Umieść tutaj swój kod makra Aplikacja.Calculation = xlCalculationAutomatic Application.ScreenUpdating = Prawda Application.DisplayStatusBar = Prawda Napis końcowy
Możesz zaimplementować makra jako procedury zdarzeń, informując program Excel o uruchamianiu określonego kodu, gdy arkusz lub skoroszyt ulegnie zmianie.
Czasami standardowe makra wprowadzają zmiany, które wyzwalają procedurę zdarzenia. Na przykład, jeśli masz standardowe makro, które manipuluje kilkoma komórkami w Arkuszu1, za każdym razem, gdy zmienia się komórka w tym arkuszu, makro musi zostać wstrzymane na czas działania zdarzenia Worksheet_Change.
Możesz dodać kolejny poziom zwiększenia wydajności, używając właściwości EnableEvents, aby poinformować program Excel, aby ignorował zdarzenia podczas działania makra.
Ustaw właściwość EnableEvents na False przed uruchomieniem makra. Po zakończeniu działania kodu makra możesz ustawić właściwość EnableEvents z powrotem na True.
Submakro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Fałsz Application.DisplayStatusBar = False Application.EnableEvents = False 'Umieść tutaj swój kod makra Aplikacja.Calculation = xlCalculationAutomatic Application.ScreenUpdating = Prawda Application.DisplayStatusBar = Prawda Application.EnableEvents = Prawda Napis końcowy
Za każdym razem, gdy makro modyfikuje liczbę wierszy, modyfikuje liczbę kolumn lub zmienia ustawienia strony w arkuszu, program Excel jest zmuszony poświęcić trochę czasu na ponowne obliczenie podziałów stron wyświetlanych w arkuszu.
Możesz uniknąć tego zachowania, po prostu ukrywając podziały stron przed uruchomieniem makra.
Ustaw właściwość arkusza DisplayPageBreaks na wartość False, aby ukryć podziały stron. Jeśli chcesz nadal wyświetlać podziały stron po uruchomieniu makra, ustaw właściwość arkusza DisplayPageBreaks z powrotem na wartość True.
Submakro1() Application.Calculation = xlCalculationManual Application.ScreenUpdating = Fałsz Application.DisplayStatusBar = False Application.EnableEvents = False Activesheet.DisplayPageBreaks = Fałsz 'Umieść tutaj swój kod makra Aplikacja.Calculation = xlCalculationAutomatic Application.ScreenUpdating = Prawda Application.DisplayStatusBar = Prawda Application.EnableEvents = Prawda Activesheet.DisplayPageBreaks = Prawda Napis końcowy
Jeśli makro manipuluje tabelami przestawnymi, które zawierają duże źródła danych, może wystąpić niska wydajność podczas wykonywania takich czynności, jak dynamiczne dodawanie lub przenoszenie pól przestawnych.
Możesz poprawić wydajność makra, wstrzymując ponowne obliczanie tabeli przestawnej do momentu wprowadzenia wszystkich zmian w polach przestawnych. Po prostu ustaw właściwość PivotTable.ManualUpdate na True, aby odroczyć ponowne obliczanie, uruchom kod makra, a następnie ustaw właściwość PivotTable.ManualUpdate z powrotem na False, aby wyzwolić ponowne obliczenie.
Submakro1() ActiveSheet.PivotTables("Tabela przestawna1").ManualUpdate=True 'Umieść tutaj swój kod makra ActiveSheet.PivotTables("Tabela przestawna1").ManualUpdate=Fałsz Napis końcowy
Należy pamiętać, że chociaż Macro Recorder oszczędza czas, pisząc dla Ciebie kod VBA, nie zawsze pisze najbardziej wydajny kod. Doskonałym przykładem jest to, jak Macro Recorder przechwytuje każdą operację kopiowania i wklejania, którą wykonujesz podczas nagrywania.
Możesz nieco wzmocnić swoje makra, wycinając pośrednika i wykonując bezpośrednią kopię z jednej komórki do komórki docelowej. Ten alternatywny kod używa argumentu Destination, aby ominąć schowek i skopiować zawartość komórki A1 bezpośrednio do komórki B1.
Zakres("A1").Miejsce docelowe kopiowania:=Range("B1")
Jeśli chcesz skopiować tylko wartości (nie formatowanie ani formuły), możesz jeszcze bardziej poprawić wydajność, unikając całej metody Copy. Po prostu ustaw wartość komórki docelowej na tę samą wartość, co w komórce źródłowej. Ta metoda jest około 25 razy szybsza niż metoda kopiowania:
Zakres("B1").Wartość = Zakres("A1").Wartość
Jeśli chcesz skopiować tylko formuły z jednej komórki do drugiej (nie wartości lub formatowanie), możesz ustawić formułę komórki docelowej na tę samą formułę, co w komórce źródłowej:
Zakres("B1").Formula = Zakres("A1").Formula
Podczas nagrywania makr często będziesz manipulować tym samym obiektem więcej niż raz. Możesz zaoszczędzić czas i poprawić wydajność, używając instrukcji With, aby wykonać kilka czynności na danym obiekcie w jednym ujęciu.
Instrukcja With zastosowana w poniższym przykładzie informuje program Excel o zastosowaniu wszystkich zmian formatowania jednocześnie:
Z zakresem ("A1"). Czcionka .Pogrubienie = Prawda .kursywa = prawda .Underline = xlUnderlineStyleSingle Kończyć z
Przyzwyczajenie się do dzielenia akcji na instrukcje With nie tylko przyspieszy działanie makr, ale także ułatwi czytanie kodu makr.
Macro Recorder lubi używać metody Select do jawnego wybierania obiektów przed podjęciem na nich działań. Generalnie nie ma potrzeby wybierania obiektów przed rozpoczęciem pracy z nimi. W rzeczywistości można znacznie poprawić wydajność makr, nie używając metody Select.
Po nagraniu makr przyzwyczaj się do zmiany wygenerowanego kodu w celu usunięcia metod Select. W takim przypadku zoptymalizowany kod wyglądałby następująco:
Arkusze("Arkusz1").Range("A1").FormulaR1C1 = "1000" Arkusze("Arkusz2").Range("A1").FormulaR1C1 = "1000" Arkusze("Arkusz3").Range("A1").FormulaR1C1 = "1000"
Zauważ, że nic nie jest zaznaczone. Kod po prostu używa hierarchii obiektów, aby zastosować potrzebne działania.
Innym sposobem na przyspieszenie makr jest ograniczenie liczby odwoływania się do danych arkusza roboczego w kodzie. Pobieranie danych z arkusza roboczego jest zawsze mniej wydajne niż z pamięci. Oznacza to, że Twoje makra będą działać znacznie szybciej, jeśli nie będą musiały wielokrotnie wchodzić w interakcje z arkuszem.
Na przykład poniższy prosty kod zmusza VBA do ciągłego powrotu do Arkuszy("Arkusz1").Range("A1"), aby uzyskać liczbę potrzebną do porównania wykonywanego w instrukcji If:
Dla MiesiącRaportu = 1 do 12 Jeśli Zakres("A1").Value = MiesiącRaportu Wtedy MsgBox 1000000 / Miesiąc raportu Zakończ, jeśli Następny Miesiąc raportu
Dużo wydajniejszą metodą jest zapisanie wartości w Arkuszach(„Arkusz1”).Zakres(„A1”) w zmiennej o nazwie MójMiesiąc. W ten sposób kod odwołuje się do zmiennej MyMonth zamiast do arkusza roboczego:
Dim MyMonth jako liczba całkowita MójMiesiąc = Zakres("A1").Wartość Dla MiesiącRaportu = 1 do 12 Jeśli MójMiesiąc = Miesiąc Zgłoszenia Wtedy MsgBox 1000000 / Miesiąc raportu Zakończ, jeśli Następny Miesiąc raportu
Rozważ wykorzystanie zmiennych do pracy z danymi w pamięci, w przeciwieństwie do bezpośredniego odwoływania się do arkuszy.
Wywołanie metody lub właściwości obiektu wymaga przejścia przez interfejs IDispatch komponentu OLE. Wywołania tych komponentów OLE wymagają czasu, więc zmniejszenie liczby odniesień do komponentów OLE może poprawić szybkość kodu makra.
Do wywoływania właściwości lub metod obiektu zazwyczaj używana jest metoda reprezentacji Object.Method , czyli „.” symbol służy do wywoływania właściwości i metod.
Dlatego liczbę wywołań metod lub właściwości można ocenić na podstawie liczby symboli „.”. Im mniej „.” symbol, tym szybciej działa kod.
Na przykład poniższa instrukcja zawiera 3 symbole „.”.
ThisWorkbook.Sheet1.Range("A1").Value = 100
Poniższa instrukcja ma tylko jeden symbol „.”.
Activewindow.Top = 100
Oto kilka sztuczek, aby zmniejszyć liczbę symboli „.” biegać szybciej.
Po pierwsze, gdy musisz wielokrotnie odwoływać się do tego samego obiektu, możesz ustawić obiekt na zmienną, aby zmniejszyć liczbę wywołań. Na przykład poniższy kod wymaga dwóch wywołań na linię.
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = 100
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = 200
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = 300
Ponieważ do obiektu Sheets("Sheet1") trzeba odwoływać się wielokrotnie, można najpierw ustawić dla niego zmienną sht , dzięki czemu każdy kod będzie musiał zostać wywołany tylko raz.
Set sht = ThisWorkbook.Sheets("Sheet1")
sht.Cells(1, 1) = 100
sht.Cells(2, 1) = 200
sht.Cells(3, 1) = 300
Po drugie, jeśli nie chcesz deklarować zmiennej tymczasowej sht, możesz także użyć wspomnianej wcześniej instrukcji With . Jak pokazano w poniższym przykładzie:
With ThisWorkbook.Sheets("Sheet1")
.Cells(1, 1) = 100
.Cells(2, 1) = 200
.Cells(3, 1) = 300
End With
Po trzecie, gdy jest wiele pętli, staraj się zachować właściwości i metody poza pętlą. Kiedy ponownie używasz wartości właściwości tego samego obiektu w pętli, możesz najpierw przypisać wartość właściwości do określonej zmiennej poza pętlą, a następnie użyć tej zmiennej w pętli, co może osiągnąć większą prędkość. Jak pokazano w poniższym przykładzie:
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = Cells(1, 2).Value
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = Cells(1, 2).Value
Next i
Każda pętla w tym przykładzie pobiera właściwość Value komórki Cells(1,2). Jeśli przypiszesz właściwość Value funkcji Cells(1.2) do zmiennej przed rozpoczęciem pętli, działanie będzie szybsze. Jak pokazano w poniższym przykładzie:
tmp = Cells(1, 2).Value
For i = 1 To 1000
ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(2, 1) = tmp
ThisWorkbook.Sheets("Sheet1").Cells(3, 1) = tmp
Next i
Powyższy kod wywołuje ThisWorkbook.Sheets("Sheet1") przy każdym zapętleniu. Możesz to zrobić szybciej, używając instrukcji With w celu przeniesienia wywołania ThisWorkbook.Sheets("Sheet1") poza pętlę. Jak pokazano w poniższym przykładzie:
tmp = Cells(1, 2).Value
With ThisWorkbook.Sheets("Sheet1")
For i = 1 To 1000
.Cells(1, 1) = tmp
.Cells(2, 1) = tmp
.Cells(3, 1) = tmp
Next i
End With
Początkujący zazwyczaj wolą używać zmiennych typu Variant, co ma tę zaletę, że jest mniej skomplikowane, ponieważ można zastosować dowolny typ danych bez problemu przepełnienia pamięci, jeśli dane są zbyt duże dla typów danych Integer lub Long. Jednak dane typu Varienmt wymagają więcej dodatkowej pamięci niż inne określone typy (2 bajty dla danych Integer, 4 bajty dla danych Long i 16 bajtów dla danych Variant), VBA wymaga więcej czasu na przetworzenie danych typu Variant niż inne określone typy danych. Jak pokazuje poniższy przykład.
Sub VariantTest()
Dim i As Long
Dim ix As Integer, iy As Integer, iz As Integer
Dim vx As Variant, vy As Variant, vz As Variant
Dim tm As Date
vx = 100: vy = 50
tm = Timer
For i = 1 To 1000000
vz = vx * vy
vz = vx + vy
vz = vx - vy
vz = vx / vy
Next i
Debug.Print "Variant types take " & Format((Timer - tm), "0.00000") & " seconds"
ix = 100: iy = 50
tm = Timer
For i = 1 To 1000000
iz = ix * iy
iz = ix + iy
iz = ix - iy
iz = ix / iy
Next i
Debug.Print "Integer types take " & Format((Timer - tm), "0.00000") & " seconds"
End Sub
W powyższym kodzie linie od 8 do 13 wykonują 1 milion operacji dodawania, odejmowania, mnożenia i dzielenia zmiennych typu Variant, a linie od 17 do 22 wykonują 1 milion operacji dodawania, odejmowania, mnożenia i dzielenia zmiennych typu Integer. Na moim komputerze działanie zmiennej Variant trwało około 0,09375 sekundy, natomiast działanie zmiennej Integer trwało około 0,03125 sekundy. Wyniki mogą się różnić w zależności od komputera, ale zmienne typu Variant są znacznie wolniejsze niż zmienne typu Integer .
Z tego powodu zaleca się unikanie używania zmiennych Variant, gdy można jawnie użyć określonego typu danych .
Smartsheet to dynamiczna platforma robocza, która umożliwia zarządzanie projektami, tworzenie przepływów pracy i współpracę z zespołem.
SharePoint to internetowy system współpracy, który wykorzystuje różnorodne aplikacje do obsługi przepływu pracy, bazy danych „list” i inne komponenty sieciowe, a także funkcje zabezpieczeń zapewniające kontrolę nad współpracą grup biznesowych.
Van Nien Calendar to aplikacja do przeglądania kalendarza w telefonie, która pomaga szybko sprawdzić na telefonie datę księżycowo-słoneczną i uporządkować ważne prace.
Microsoft Outlook to aplikacja biznesowa i produktywna opracowana przez Microsoft Corporation.
ClickUp to jedna z najwyżej ocenianych platform zwiększających produktywność dla każdej firmy. Duże firmy, takie jak Google, Booking.com, San Diego Padres i Uber, korzystają z ClickUp, aby zwiększyć produktywność w miejscu pracy.
PDF stał się powszechnie używanym formatem do czytania, tworzenia i wysyłania dokumentów tekstowych. Z kolei wzrosła liczba programów wykorzystywanych do tego typu dokumentacji. Przeglądarka PDF-XChange Viewer należy do rosnącej liczby przeglądarek plików PDF.
Apache OpenOffice oferuje kompletny zestaw aplikacji Office, które mogą konkurować z Microsoft 365, zwłaszcza w programach Excel, PowerPoint i Word. Pozwala efektywniej zarządzać projektami i obsługuje kilka formatów plików.
Oprogramowanie iTaxViewer jest obecnie najpopularniejszym oprogramowaniem do odczytu plików XML. To oprogramowanie jest aplikacją do odczytu elektronicznych deklaracji podatkowych w formacie XML Generalnego Departamentu Podatków.
Nitro PDF Reader to poręczny edytor plików PDF, który obejmuje wszystkie podstawowe zadania, które większość ludzi wykonuje codziennie z dokumentami PDF.
Foxit Reader to przede wszystkim czytnik plików PDF, który umożliwia także tworzenie plików PDF, podpisywanie ich, edycję i dodawanie adnotacji. Działa na systemach operacyjnych, dostępne są wtyczki do różnych programów z pakietu Microsoft Office.