Страницы: 1
RSS
Как подавить переключение в окно VBA?
 
При запуске макроса, который удаляет и тут же вставляет код в ThisWorkbook/ЭтаКнига, выскакивает окно VBA.
И показывается код только что внедрённый в ThisWorkbook/ЭтаКнига.
Программно закрыть его можно, но это вызывает дёргание окон:
Код
SendKeys "%{F4}"
или
ThisWorkbook.VBProject.VBE.MainWindow.Visible = False

Возможно ли подавить переключение в окно VBA?

процедура вставляющая код в ThisWorkbook/ЭтаКнига.
Скрытый текст
Изменено: jack_21 - 18.08.2019 17:38:06
 
jack_21, по данным из авторитетного источника получается, что побороть проблему без дополнительного обращение к API Windows затруднительно: http://www.cpearson.com/Excel/vbe.aspx#ScreenFlicker
Цитата

This will hide the VBE window, but you may still see it flicker. To prevent this, you must use the LockWindowUpdate Windows API function.
Код
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
In GoTo we trust
 
Читал я этот источник. Имхо, шибко громоздко это всё. А у меня "громоздко" равняется "велика вероятность ошибки".
Так ещё и Declare Function надо дуально сделать - для х32 и х64.
Страницы: 1
Наверх