Pracuję nad projektem VBA opartym na skoroszycie. Kod otwiera nowy skoroszyt i wywołuje zewnętrzny interfejs API, który pobiera i wstawia kilka danych do wielu arkuszy tego nowego skoroszytu. Dezaktywuję aktualizację ekranu (Application.Screenupdating = False
), więc początkowo ekran pozostaje skupiony na oryginalnym skoroszycie, podczas gdy interfejs API pobiera dane z drugiego skoroszytu w tle. Jednak ekran przełącza się do nowego skoroszytu, gdy interfejs API wstawi dane. Jak mogę temu zapobiec? Dzięki!Ukrywanie aktywnego skoroszytu programowo w programie Excel
Odpowiedz
Należy zapisać i zamknąć skoroszyt docelowy lub wybrać oryginalny skoroszyt przed ponownym włączeniem opcji situpdating.
można spróbować przy użyciu funkcji ShowWindow API:
Public Declare Function ShowWindow Lib "user32.dll" _
(ByVal HWND As Long, ByVal nCmdShow As Long) As Long
Const SW_HIDE as Long = 0
Const SW_SHOW as Long = 5
ShowWindow otherWorkbookApplication.Hwnd, SW_HIDE
'Your code here
ShowWindow otherWorkbookApplication.Hwnd, SW_SHOW
lub alternatywnie, funkcja LockWindowUpdate API (dzięki Chip Pearson, http://www.cpearson.com/excel/vbe.aspx):
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal ClassName As String, ByVal WindowName As String) As Long
Private Declare Function LockWindowUpdate Lib "user32" _
(ByVal hWndLock As Long) As Long
Sub EliminateScreenFlicker()
Dim VBEHwnd As Long
On Error GoTo ErrH:
Application.VBE.MainWindow.Visible = False
VBEHwnd = FindWindow("wndclass_desked_gsk", _
Application.VBE.MainWindow.Caption)
If VBEHwnd Then
LockWindowUpdate VBEHwnd
End If
'''''''''''''''''''''''''
' your code here
'''''''''''''''''''''''''
Application.VBE.MainWindow.Visible = False
ErrH:
LockWindowUpdate 0&
End Sub
Ukrywanie aktywny skoroszyt jest możliwe
ActiveWorkbook.Windows(1).Visible = False
Być może trzeba będzie wymienić ActiveWorkbook
z odpowiednim odwołaniem, jeśli dany skoroszyt nie jest aktywny i/lub dodaje pętlę podobną do For i = 1 To ActiveWorkbook.Windows.Count
, jeśli skoroszyt ma wiele okien.
+1 Ta metoda jest prosta w użyciu i możesz po prostu uruchomić ją ponownie z "True" po zakończeniu kodu –
- 1. Ustawianie wartości aktywnego skoroszytu w programie Excel VBA
- 2. Co - w programie Excel?
- 3. Dodawanie arkuszy do końca skoroszytu w programie Excel (normalna metoda nie działa?)
- 4. Błąd podczas otwierania skoroszytu programu Excel za pomocą kodu C#
- 5. Ukrywanie nagłówka w programie Infragistics Winform UltraCombo
- 6. Połączenie skoroszytu programu Excel powoduje, że rozmiar pliku jest duży
- 7. Excel Upaść podczas odprawy niezmodyfikowanej skoroszytu programu Excel do programu SharePoint z VBA
- 8. Dodawanie hiperłączy w programie Excel [2007] w języku C# - W programie Excel to samo
- 9. Ukrywanie arkusza programu Excel z VBA
- 10. arkusze skoroszytu programu Excel z adresu URL na `pandas.DataFrame`
- 11. Dynamicznie wstawiaj makro do nowego skoroszytu programu Excel
- 12. Excel interop: zapisywanie skoroszytu bez pokazywania okna dialogowego zapisu
- 13. Jak wyczyścić Sortuj w programie Excel 2007
- 14. Wyszukiwanie duplikatów wierszy w programie Excel
- 15. CopyOrigin na Insert w programie Excel VBA
- 16. Jak wymusić argument w programie Excel UDF
- 17. Używanie skryptów JavaScript w programie Excel
- 18. pierwszy pusty wiersz w programie excel
- 19. Efektywna dolna obudowa w programie Excel VBA
- 20. Jak używać znaków zastępczych w programie excel?
- 21. Niedopasowanie argumentu ByRef w programie Excel VBA
- 22. szybki sposób kopiowania formatowania w programie excel
- 23. Zmień nazwę zdarzenia arkusza w programie Excel
- 24. Opóźnienie późniejsze w programie Excel. Cała kolumna.NumberFormat:
- 25. Formatowanie warunkowe w programie Excel z C#
- 26. Filtrowanie tablic 2D w programie Excel VBA
- 27. Czy istnieje funkcja koalescencji w programie Excel?
- 28. jak pogrubić dane CSV w programie excel?
- 29. Wykres liniowy wielu osi w programie excel
- 30. VBA zminimalizować wstążkę w programie Excel
Należy zauważyć, że kod Chipa Pearsona używa FindWindow do uzyskania uchwytu edytora VB. Możesz zignorować część FindWindow i po prostu użyć właściwości Hwnd obiektu aplikacji swojego skoroszytu docelowego jako argumentu dla LockWindowUpdate. Zostawiłem to tam, więc masz obie alternatywy. – mkingston
"ShowWindow" API jest lepszy, ponieważ nie będzie miał żadnych skutków ubocznych, porównaj z "ActiveWorkbook.Windows (1) .Visible = False". W moim teście, po zapisaniu skoroszytu z ".Windows (1) .Visible = False", musisz ustawić Visible back na True, zanim będziesz mógł przeglądać dane. – bobyuan