使用 Windows Media Player 对象关闭用户窗体返回自动化错误

问题描述

我有一个包含 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