宏运行期间VBA编辑器闪烁

问题描述 投票:0回答:1

经过大量的研究,我找不到任何与我有同样问题的人。那么任何大师都可以帮我使用我的Excel宏吗?

我的宏做了以下事情:

  1. 打开另一个excel工作簿
  2. 将第一张工作簿从此工作簿复制到我当前的工作簿
  3. 在复制的工作表中创建一个按钮
  4. 在这个新创建的按钮中写一些代码

这就是问题,当我的宏在按钮中写入代码时,它会打开VBA代码编辑器并在之后关闭。我的宏做了很多次,所以VBA代码编辑器在宏运行期间一直闪烁。

“Application.ScreenUpdating = False”无法解决问题。

请参阅下面的代码,执行此步骤4,如果您知道解决方案,请告诉我。

wb是我的工作簿,是我的工作表

 Set oOleObj = ws.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=5.4, Top:=4.8, Width:=97.2, Height:=35.4)

Set VBP = wb.VBProject
Set VBC = VBP.VBComponents(VBP.VBComponents.Count)
Set CM = VBC.CodeModule

With wb.VBProject.VBComponents(wb.Worksheets(ws.Name).CodeName).CodeModule
    LineNum = .CreateEventProc("click", oOleObj.Name)
    LineNum = LineNum + 1
    .InsertLines LineNum, "UploadToAlmButton_OnClick"
End With

我可以简单地保护项目不被密码查看。这应该解决问题,但创建另一个问题:如果它受到保护,我不能在宏上编写代码,就像我在第4步中所做的那样:(

谢谢!

excel vba excel-vba
1个回答
1
投票

隐藏VBE窗口

Application.VBE.MainWindow.Visible = False
Application.VBE.MainWindow.Visible = True

如果VBE窗口仍然闪烁,那么您需要使用LockWindowUpdate Windows API函数。

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

参考文献:

  1. Cpearson - Eliminating Screen Flicker During VBProject Code
  2. MSDN- VBE flashes while programming in the VBE
© www.soinside.com 2019 - 2024. All rights reserved.