Usprawnianie kodu VBA programu Excel: porzucenie .Wybierz, aby zwiększyć wydajność
Używanie metody .Select w Excel VBA jest powszechnie uważane za złą praktykę ze względu na jej wpływ na możliwość ponownego użycia i wydajność kodu. Wielu programistów jest świadomych wad, ale często mają trudności ze znalezieniem alternatywnych podejść.
W tym artykule przyjrzymy się, jak uniknąć używania .Select i skupić się na wykorzystaniu zmiennych do odwoływania się do obiektów takich jak ActiveCell. Rozumiejąc i stosując te techniki, możesz sprawić, że Twój kod Excel VBA będzie czystszy i solidniejszy.
Komenda | Opis |
---|---|
Dim | Deklaruje zmienne w VBA podając ich typ. |
Set | Przypisuje odwołanie do obiektu do zmiennej. |
ThisWorkbook | Odnosi się do skoroszytu, w którym działa kod VBA. |
Sheets | Uzyskuje dostęp do arkusza w skoroszycie. |
Range | Określa zakres komórek w arkuszu. |
For Each...Next | Wykonuje pętlę przez każdy element kolekcji lub tablicy. |
Value | Pobiera lub ustawia wartość komórki lub zakresu komórek. |
Zwiększanie wydajności Excel VBA poprzez unikanie .Select
Pierwszy skrypt pokazuje, jak uniknąć używania metody .Select metoda poprzez wykorzystanie zmiennych do odwoływania się do określonych obiektów w programie Excel VBA. W tym przykładzie zaczynamy od zadeklarowania zmiennych za pomocą metody Dim instrukcja definiująca arkusz (ws), zakres (rng) i poszczególne komórki w tym zakresie (cell). Ustawiając te zmienne za pomocą Set polecenia, możemy bezpośrednio manipulować określonym zakresem bez jego wybierania. Skrypt przechodzi przez każdą komórkę w zakresie, używając metody For Each...Next pętla, podwajając wartość każdej komórki. Takie podejście zwiększa możliwość ponownego użycia i wydajność kodu, ponieważ eliminuje niepotrzebne selekcje i skupia się na bezpośredniej manipulacji komórkami.
Drugi skrypt prezentuje podobną koncepcję, ale skupia się na kopiowaniu wartości z jednego zakresu do drugiego bez użycia .Select metoda. Ponownie korzystamy z Dim instrukcja deklarująca zmienne dla docelowego arkusza (targetSheet), zakres źródła (sourceRange) i zakres docelowy (targetRange). Po ustawieniu tych zmiennych za pomocą Set polecenie, skrypt kopiuje wartości z sourceRange Do targetRange bezpośrednio, przypisując właściwość wartości zakresu docelowego do właściwości zakresu źródłowego. Ta metoda gwarantuje, że kod pozostanie czysty i wydajny, unikając pułapek związanych z używaniem .Select i poprawę ogólnej wydajności skryptu VBA.
Optymalizacja Excel VBA: Alternatywy dla używania .Select
Programowanie VBA w Excelu
Sub AvoidSelectWithVariables()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
' Set worksheet and range variables
Set ws = ThisWorkbook.Sheets("Sheet1")
Set rng = ws.Range("A1:A10")
' Loop through each cell in the range
For Each cell In rng
' Perform actions on each cell directly
cell.Value = cell.Value * 2
Next cell
End Sub
Refaktoryzacja kodu VBA programu Excel w celu wyeliminowania .Select
Ulepszenie kodu Excel VBA
Sub RefactorWithoutSelect()
Dim targetSheet As Worksheet
Dim sourceRange As Range
Dim targetRange As Range
' Define the worksheet and ranges
Set targetSheet = ThisWorkbook.Sheets("Sheet2")
Set sourceRange = targetSheet.Range("B1:B10")
Set targetRange = targetSheet.Range("C1:C10")
' Copy values from source to target range without selecting
targetRange.Value = sourceRange.Value
End Sub
Opanowanie Excel VBA: zaawansowane techniki, których należy unikać .Wybierz
Oprócz używania zmiennych do ominięcia .Select Inną skuteczną techniką jest wykorzystanie metody With oświadczenie. The With Instrukcja umożliwia wykonanie wielu operacji na pojedynczym obiekcie bez wielokrotnego odwoływania się do tego obiektu. To nie tylko upraszcza kod, ale także poprawia jego czytelność i wydajność. Na przykład zamiast wybierać zakres, a następnie wykonywać na nim wiele akcji, możesz zawinąć te akcje w a With blokuj, unikając w ten sposób konieczności użycia .Select.
Kolejna zaawansowana metoda, której należy unikać .Select korzysta z Application obiekt do bezpośredniego manipulowania właściwościami i metodami programu Excel. The Application Obiekt umożliwia kontrolowanie programu Excel jako całości, umożliwiając interakcję z różnymi elementami środowiska programu Excel bez ich wybierania. Na przykład możesz zmienić aktywny arkusz lub uzyskać dostęp do aktywnej komórki bezpośrednio poprzez Application object, usprawniając w ten sposób kod i czyniąc go bardziej wydajnym. Techniki te, w połączeniu z wykorzystaniem zmiennych i pętli, mogą znacznie poprawić Twoje umiejętności programowania w VBA i skutkować łatwiejszym w utrzymaniu i wydajniejszym kodem.
Często zadawane pytania dotyczące unikania .Select w Excel VBA
- Jaka jest główna wada używania .Select w VBA?
- Za pomocą .Select może sprawić, że Twój kod będzie mniej wydajny i trudniejszy w utrzymaniu, ponieważ często wymaga niepotrzebnych kroków i może prowadzić do błędów.
- Jak mogę odwołać się do komórki bez użycia .Select?
- Użyj zmiennej, aby zapisać zakres lub komórkę i bezpośrednio nią manipulować, np. Set cell = Worksheets("Sheet1").Range("A1").
- Jakie są zalety instrukcji With w VBA?
- The With instrukcja umożliwia wykonanie wielu akcji na jednym obiekcie, poprawiając czytelność i wydajność kodu.
- Jak przeglądać zakres komórek bez użycia .Select?
- Użyć For Each...Next pętla do iteracji po każdej komórce w zakresie, np. For Each cell In Range("A1:A10").
- Czy mogę manipulować aktywną komórką bez użycia .Select?
- Tak, możesz bezpośrednio odwoływać się do aktywnej komórki za pomocą Application.ActiveCell i wykonaj na nim akcje.
- Co to jest obiekt aplikacji w VBA?
- The Application obiekt reprezentuje całą aplikację Excel, umożliwiając kontrolę środowiska i ustawień programu Excel.
- Jak mogę skopiować wartości z jednego zakresu do drugiego bez użycia .Select?
- Bezpośrednio przypisz wartość zakresu źródłowego do zakresu docelowego, np. targetRange.Value = sourceRange.Value.
- Dlaczego unikanie .Select jest uważane za najlepszą praktykę w VBA?
- Unikanie .Select skutkuje czystszym, szybszym i bardziej niezawodnym kodem, co ułatwia debugowanie i konserwację.
- Jaka jest popularna alternatywa dla .Select w celu uzyskania dostępu do zakresów?
- Używaj zmiennych do przechowywania odniesień do zakresów i manipuluj nimi bezpośrednio, unikając konieczności ich używania .Select.
Optymalizacja kodu VBA Excel poprzez unikanie .Select
Pierwszy skrypt pokazuje, jak uniknąć używania metody .Select metoda poprzez wykorzystanie zmiennych do odwoływania się do określonych obiektów w Excel VBA. W tym przykładzie zaczynamy od zadeklarowania zmiennych za pomocą metody Dim instrukcja definiująca arkusz (ws), zakres (rng) i poszczególne komórki w tym zakresie (cell). Ustawiając te zmienne za pomocą Set polecenia, możemy bezpośrednio manipulować określonym zakresem bez jego wybierania. Skrypt przechodzi przez każdą komórkę w zakresie, używając metody For Each...Next pętla, podwajając wartość każdej komórki. Takie podejście zwiększa możliwość ponownego wykorzystania i wydajność kodu, ponieważ eliminuje niepotrzebne selekcje i skupia się na bezpośredniej manipulacji komórkami.
Drugi skrypt prezentuje podobną koncepcję, ale skupia się na kopiowaniu wartości z jednego zakresu do drugiego bez użycia .Select metoda. Ponownie korzystamy z Dim instrukcja deklarująca zmienne dla docelowego arkusza (targetSheet), zakres źródła (sourceRange) i zakres docelowy (targetRange). Po ustawieniu tych zmiennych za pomocą Set polecenie, skrypt kopiuje wartości z sourceRange Do targetRange bezpośrednio, przypisując właściwość wartości zakresu docelowego do właściwości zakresu źródłowego. Ta metoda gwarantuje, że kod pozostanie czysty i wydajny, unikając pułapek związanych z używaniem .Select i poprawę ogólnej wydajności skryptu VBA.
Podsumowanie: zwiększanie wydajności VBA
Eliminacja stosowania .Select w Excelu VBA może znacznie poprawić czytelność, wydajność i łatwość konserwacji Twojego kodu. Używając zmiennych, With oświadczenie i Application obiekt, możesz wykonywać operacje bezpośrednio na zakresach i komórkach, bez zbędnych kroków. Techniki te sprawiają, że skrypty są solidniejsze i łatwiejsze do debugowania, co prowadzi do usprawnienia kodowania w Excel VBA.