宏运行期间VBA编辑器闪烁

时间:2018-03-15 10:23:30

标签: excel vba excel-vba

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

我的宏执行以下操作:

  1. 打开另一个Excel工作簿

  2. 将此工作簿中的第一张工作表复制到我当前的工作簿

  3. 在复制的表格中创建一个按钮

  4. 在这个新创建的按钮中写下一些代码

  5. 这就是问题,当我的宏在按钮中写入代码时,它会打开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步那样用宏编写代码了:(

    谢谢!

1 个答案:

答案 0 :(得分: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