Excel 2016 版本1811(内部版本11029.20079即点即用)崩溃而没有错误。事实是,它仅在(main)
UserForm中崩溃。如果将容器添加到任何其他UserForm中,它将执行而没有任何问题。
Private container As Object
'***************************************************************************
'Purpose: Create the container frame that holds the page title and preview image
'***************************************************************************
Private Sub createContainer()
Set container = main.pageThumbnails.Controls.add("Forms.Frame.1", name) ' Break here, continuing causes *CRASH*
With container
.Caption = ""
.height = containerHeight
.width = containerWidth
.Left = 12
.top = areaHeight
.BackColor = defaultBackColor
.BorderColor = defaultBorderColor
End With
With main.pageThumbnails
.ScrollHeight = areaHeight
End With
End Sub
检查Windows事件查看器会给我以下信息:
Faulting application name: EXCEL.EXE, version: 16.0.11029.20079, time stamp: 0x5bf4c8c3
Faulting module name: coml2.dll, version: 10.0.17134.407, time stamp: 0xaad4943a
Exception code: 0xc0000005
Fault offset: 0x0000000000016521
Faulting process id: 0x100788
Faulting application start time: 0x01d48cb0460efe6f
Faulting application path: C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE
Faulting module path: C:\WINDOWS\System32\coml2.dll
Report Id: 3ff6565e-7c37-4733-87fd-7e5ab12cba1f
Faulting package full name:
Faulting package-relative application ID:
我尝试过的事情:
container
而不是MSForms.frame
铸造为Object
excel.exe /s
container
从私有更改为公开,并引用Me.container
main
引用main.thumbnails
表单main
代码隐藏表单上创建框架.xlsm
文件,并将其复制到所有类,模块和表单(main
除外)上。从头开始创建main
CommandButton
添加到框架(此方法有效...) thumbs
帧的ID更改为一堆随机字母答案 0 :(得分:0)
在整个搜索过程中,我发现Windows事件查看器中的其他人具有相同的崩溃和错误日志。这些帖子都没有像我一样使用VBA。 我通过删除引用的控件 main.pageThumbnails
并在编辑器中重新创建它来解决了这个问题。
目前我不知道是什么原因引起的,也不知道此解决方案是否永久。
在继续努力解决这个问题,没有提出最终解决方案,甚至没有解释为什么发生这种情况之后,我创建了一个解决方法。
我没有向容器中添加MSForms.Frame
对象,而是向容器中添加了框架内容(图像和四个标签),并通过Sub setTop
方法控制了它们的位置。
目前,我不确定性能是否会受到影响,但至少我可以继续开发其他功能。
答案 1 :(得分:0)
pageThumbnails
还是一个框架吗?您的用户表单中是否还有其他容器?如果是这样,这是一个Excel错误。
这是一个古老的问题,但是我花了数小时试图找到解决方案,所以这是我的发现。
首先,要复制问题:
Private Sub UserForm_Activate()
Set b = FrameA.Controls.Add("Forms.Frame.1", "FrameB")
End Sub
Sub showUserForm1()
UserForm1.Show
End Sub
一切正常。现在,在UserForm_Activate():Set d = FrameC.Controls.Add("Forms.Frame.1", "FrameD")
中添加第二个Frame(FrameC)及其代码。再次运行showUserForm1:Excel崩溃。更准确地说,它在第一行崩溃(如果您跳过它,第二行工作正常)。
经过进一步测试,看来只有在您要添加其他框架的框架在背面时,该框架才会失败。如果连续将FrameA或Frame C放在前面,您会发现它总是在后面的Frame上失效。
所以我只能想到3种可能性: