【发布时间】:2021-01-29 15:39:13
【问题描述】:
我有一个包含 Windows Media Player 对象的用户窗体。初始化用户窗体时,它会将文件 URL 分配给媒体播放器对象,设置其大小,然后播放视频。 (我在 {Custom} 设置中禁用了自动播放功能。)所有这些代码都能正常工作。问题是当我尝试关闭用户窗体时,我收到以下错误: 运行时错误“-2147417848 (80010108)”:自动化错误调用的对象已与其客户端断开连接。
为了自动关闭用户窗体,我使用了以下代码:
Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)
'MoviePlayer variable is set when UserForm initializes
Debug.Print MoviePlayer.Status
If MoviePlayer.Status = "Stopped" Then
Unload Me '<----Crash occurs following this action
End If
End Sub
其他相关代码:
Private Sub UserForm_Initialize()
Set MoviePlayer = Me.WindowsMediaPlayer1
MoviePlayer.url = "My Video File"
MoviePlayer.uiMode = "None"
MoviePlayer.stretchToFit = True
MoviePlayer.Top = Me.Top + 1
MoviePlayer.Left = Me.Left + 1
MoviePlayer.Height = Me.InsideHeight - 2
MoviePlayer.Width = Me.InsideWidth - 2
MoviePlayer.Controls.Play
End Sub
从以下位置调用用户窗体:
Sub TestMe()
MyUSerform.Show
End Sub
我试图在Unload Me 之前将媒体播放器对象设置为空,并清除关联的网址。然而,这并没有阻止错误的发生。此外,我尝试在Unload Me 操作之后添加End,这确实消除了错误但也使我的Excel 崩溃。 On Error 也没有帮助。用户关闭 UserForm 时不会出现该错误。
我使用的是 Excel 2013。附带说明,我在个人 Excel 2007 版上使用了上述代码,但没有收到自动化错误。
我将不胜感激任何有关代码的帮助,以使用户窗体在没有错误的情况下关闭。
【问题讨论】:
-
不要
Unload用户表单。Me.Hide. -
@bigben 感谢您的快速回复。所以 me.hide 有点工作,但现在我的初始化代码在用户窗体被激活时不再运行。有没有解决的办法?另外,谢谢你的链接,但地址被我公司屏蔽了。
-
@Bigben 添加了相关代码。因此,经过一些测试,我认为我可以正常工作。我留下了我的
initialize.userform代码并添加了activate.userform。对于该代码,我只包含了movieplayer.controls.play,它现在似乎可以正常工作了。不卸载用户表单是否有任何后果?如果另一个从未卸载,其他用户窗体是否仍会显示? -
那么您真正应该做的是创建用户表单的新instance。我提供的链接试图证明这一点。基本上,你不想要
MyUSerform.Show;相反,With New MyUSerform、.Show、End With。
标签: excel vba userform windows-media-player