我的宏执行以下操作:
打开另一个Excel工作簿
将此工作簿中的第一张工作表复制到我当前的工作簿
在复制的表格中创建一个按钮
在这个新创建的按钮中写下一些代码
这就是问题,当我的宏在按钮中写入代码时,它会打开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步那样用宏编写代码了:(
谢谢!
答案 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
参考文献: