【问题标题】:Closing UserForm with Windows Media Player Object Returns an Automation Error使用 Windows Media Player 对象关闭用户窗体会返回自动化错误
【发布时间】: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.ShowEnd With

标签: excel vba userform windows-media-player


【解决方案1】:

这是我根据 BigBen 的反馈和橡胶鸭的文章的解决方案:

在模块 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2022-12-11
    • 1970-01-01
    • 2017-02-28
    • 2019-10-03
    相关资源
    最近更新 更多