При запуске макроса, который удаляет и тут же вставляет код в ThisWorkbook/ЭтаКнига, выскакивает окно VBA. И показывается код только что внедрённый в ThisWorkbook/ЭтаКнига. Программно закрыть его можно, но это вызывает дёргание окон:
Код
SendKeys "%{F4}"
или
ThisWorkbook.VBProject.VBE.MainWindow.Visible = False
Возможно ли подавить переключение в окно VBA?
процедура вставляющая код в ThisWorkbook/ЭтаКнига.
Скрытый текст
Код
Sub CreateEventProcedure()
Dim objVBProj As Object, objVBComp As Object, objCodeMod As Object
Dim lLineNum As Long
On Error Resume Next
Set objVBProj = ActiveWorkbook.VBProject
Set objVBComp = objVBProj.VBComponents(ActiveWorkbook.CodeName)
Set objCodeMod = objVBComp.CodeModule
'вставляем код
With objCodeMod
lLineNum = .CreateEventProc("BeforeClose", "Workbook")
lLineNum = lLineNum + 1
.InsertLines lLineNum, "Application.AskToUpdateLinks = False"
End With
End Sub
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
Читал я этот источник. Имхо, шибко громоздко это всё. А у меня "громоздко" равняется "велика вероятность ошибки". Так ещё и Declare Function надо дуально сделать - для х32 и х64.