2008-09-27 11 views

Odpowiedz

14

korzystać zarówno z proponowanych rozwiązań:

Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
... 
... 
... 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
0

Można wyłączyć automatyczne obliczanie w oknie dialogowym opcji, ustawia je tak, aby obliczał się tylko po naciśnięciu klawisza F9.

+0

moje makro działa tylko kiedy go wykonać, więc jestem dobrze w tym względzie, ale nie chcę oglądać excel wokół kopiowanie danych (jak określone przez makro), tylko końcowy wynik: – Oskar

2

Application.ScreenUpdating = False

I oczywiście ustawić ją z powrotem na True ponownie, gdy skończysz, nawet jeśli błąd jest podniesiona. Przykład:

Public Sub MyMacro 
    On Error GoTo ErrHandler 
    Application.ScreenUpdating = False 
    ... do my stuff that might raise an error 
    Application.ScreenUpdating = True 
    Exit Sub 
ErrHandler: 
    Application.ScreenUpdating = True 
    ... Do something with the error, e.g. MsgBox  
End Sub 
+0

Jak mogę upewnić się, że otrzymam go z powrotem po błędzie? – Oskar

+0

Dodałem przykład, aby to pokazać. – Joe

1

Opierając Joe i jasnowidz (ta wykorzystuje składnię stary, więc jest to zgodne z VBA Office 2000):

On Error Goto AfterCalculation 
Application.ScreenUpdating = False 
Application.Calculation = xlCalculationManual 
... 

AfterCalculation: 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
2

Ja również wolę korzystać z obu proponowanych rozwiązań, , ale także zachować tryb poprzednich obliczeń użytkowników.

Do tego konkretnego zastosowania może to być nic wielkiego, ale to zwykle najlepsze praktyki aby użytkownicy mają ich ustawienia przywrócone po zabiegu jest zakończona:

Application.ScreenUpdating = False 
PreviousCalcMode = Application.Calculation 
Application.Calculation = xlCalculationManual 
    ... 
    ... 
    ... 
Application.Calculation = PreviousCalcMode 
Application.ScreenUpdating = True 

NB. Byłoby warto poświęcić trochę czasu na wstawienie obsługi błędów, która włącza Application.ScreenUpdating w przypadku wystąpienia błędu w Twoim znakomitym kodzie;) Jeśli pamięć służy mi poprawnie, Excel nie będzie wyświetlał żadnych błędów itp., Gdy ScreenUpdating = false. coś takiego:

Sub DoSomeThing 


On Error Goto DisplayError 

Application.ScreenUpdating = False 
PreviousCalcMode = Application.Calculation 
Application.Calculation = xlCalculationManual 
    ... 
    ... 
    ... 
Application.Calculation = PreviousCalcMode 
Application.ScreenUpdating = True 

Exit Sub 

DisplayError: 
Application.Calculation = PreviousCalcMode 
Application.ScreenUpdating = True 

MsgBox Err.Description 
End 'This stops execution of macro, in some macros this might not be what you want' 
    '(i.e you might want to close files etc)' 
End Sub 
Powiązane problemy