VBA编辑器在宏运行期间闪烁

VBA编辑器在宏运行期间闪烁,vba,excel,Vba,Excel,经过大量研究,我找不到和我有同样问题的人。那么,任何一位大师都可以帮助我使用Excel宏吗 我的宏执行以下操作: 打开另一个excel工作簿 将第一张工作表从此工作簿复制到当前工作簿 在复制的工作表中创建按钮 在这个新创建的按钮中编写一些代码 问题是,当我的宏在按钮中写入代码时,它会打开VBA代码编辑器,然后关闭。我的宏多次执行此操作,因此VBA代码编辑器在宏运行期间一直闪烁 “Application.ScreenUpdate=False”未解决该问题 请参阅下面我的代码来执行第4步,如果您知道

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

我的宏执行以下操作:

  • 打开另一个excel工作簿

  • 将第一张工作表从此工作簿复制到当前工作簿

  • 在复制的工作表中创建按钮

  • 在这个新创建的按钮中编写一些代码

  • 问题是,当我的宏在按钮中写入代码时,它会打开VBA代码编辑器,然后关闭。我的宏多次执行此操作,因此VBA代码编辑器在宏运行期间一直闪烁

    “Application.ScreenUpdate=False”未解决该问题

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

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

     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中那样通过宏在其上编写代码:(

    谢谢!

    要隐藏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
    
    参考文献:


  • 我不认为IDE窗口需要打开。对于用户来说,如果IDE窗口从未打开,它将不会重新绘制。直到开发人员按下Alt-F11,IDE窗口才真正创建。因此,我认为不必担心。我将带宏的excel复制到另一台计算机以检查这一点,但不幸的是,它还是打开了IDE窗口。谢谢:(Maddy的答案很好,因此我坚持认为,如果失败,那么你可以从之前制作的复制,而不是一直在动态创建。不幸的是,我没有,我将“Application.VBE.MainWindow.Visible=False”放在保存第4步的函数开头,但什么也没有发生。谢谢:(经过进一步调查,我发现您的解决方案与我需要的非常接近。您的这段代码确实隐藏了IDE窗口,但当代码到达“插入行”时,窗口再次显示。:(我也尝试了这段代码。但下面的这段代码仍然使它出现半秒,然后消失:带wb.VBProject.VBComponents(wb.Worksheets(ws.Name.CodeName).codemule LineNum=.CreateEventProc(“click”,oOleObj.Name)LineNum=LineNum+1.InsertLines LineNum,“uploadtoalButton_OnClick”End with如果有其他方法将我的函数分配给新按钮的OnClick事件,将解决我的问题,但我找不到其他方法。