问题描述
我有一个包含 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
UserForm 调用自:
Sub TestMe()
MyUSerform.Show
End Sub
我试图在 Unload Me
之前将 mediaplayer 对象设置为空,并清除关联的 url。然而,这并没有阻止错误的发生。此外,我尝试在 End
操作之后添加 Unload Me
,这确实消除了错误,但也会使我的 Excel 崩溃。 On Error
也没有帮助。用户关闭 UserForm 时不会发生该错误。
我使用的是 Excel 2013。顺便说一下,我在我的个人 Excel 2007 版上使用了上述代码,但没有收到自动化错误。
我将不胜感激任何有关代码的帮助,以使用户窗体在没有错误的情况下关闭。
解决方法
这是我根据 BigBen 的反馈和 Rubberduck 的文章得出的解决方案:
在模块 1 中:
Sub NewTest()
With New UserForm1
Set MoviePlayer = .WindowsMediaPlayer1
MoviePlayer.url = "My Video File"
MoviePlayer.uiMode = "None"
MoviePlayer.stretchToFit = True
MoviePlayer.Top = .Top + 1
MoviePlayer.Left = .Left + 1
MoviePlayer.Height = .InsideHeight - 2
MoviePlayer.Width = .InsideWidth - 2
MoviePlayer.Controls.Play
.Show
End With
End Sub
在 UserForm1
中,我只有以下代码:
Private Sub WindowsMediaPlayer1_PlayStateChange(ByVal NewState As Long)
If WindowsMediaPlayer1.Status = "Stopped" Then
Me.Hide
End If
End Sub