媒体播放器完成后如何执行vba任务

时间:2013-08-27 00:53:35

标签: vba ms-access access-vba ms-access-2010 wmp

我正在使用Access 2010并设置表格以识别特定的视频文件。我在窗体上有一个按钮,可以使用WindowsMediaPlayer启动视频文件。问题是我想在视频运行后更新表格。我已经从表格上的按钮(fTest1)快速创建了这个,但下一部分我已经搜索了一段时间。

Private Sub Command1_Click()
Dim player As WindowsMediaPlayer

DoCmd.OpenForm "fTest2"

Set player = Forms!fTest2!WMP.Object
Forms!fTest2!WMP.URL = "S:\Training Videos\Wildlife.wmv"

' here is where I want to do something after the file has finished
' 

我使用msgbox进行了测试,但在播放视频时显示出来。寻找呼唤或等到或等等。

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

在测试中遇到磕磕绊后,我在access-programmers.co.uk上发了一篇由ghudson发布的帖子,用于以下功能。

Public Function Pause(NumberOfSeconds As Variant)
On Error GoTo Err_Pause

Dim PauseTime As Variant, start As Variant

PauseTime = NumberOfSeconds
start = Timer
Do While Timer < start + PauseTime
DoEvents
Loop

Exit_Pause:
Exit Function

Err_Pause:
MsgBox Err.Number & " - " & Err.Description, vbCritical, "Pause()"
Resume Exit_Pause

End Function

Private Sub Command1_Click()
Dim player As WindowsMediaPlayer
Dim VideoDone As String

DoCmd.OpenForm "fTest2"

Set player = Forms!ftest2!WMP.Object
Forms!ftest2!WMP.URL = "S:\Training Videos\Wildlife.wmv"

VideoDone = "No"
Pause 5

Do While VideoDone = "No"
Pause 2
If player.playState = wmppsStopped Then VideoDone = "Yes"
Loop

player.Close
DoCmd.Close acForm, "fTest2"

End Sub

该按钮位于名为“fTest1”的测试表单上。我没有“没有回应”或忙于“圈子”。像魅力一样。

答案 1 :(得分:0)

另一种可能性是简单地使用基于wmppsStopped的DoEvents循环并删除Pause函数中间人:

Do Until player.playState = wmppsStopped
    DoEvents
Loop

这只是保持循环,但将控制传递给控制台(因此Access和Windows不会“锁定”),直到视频结束。只需确保用户无法关闭表单:删除控件框并制作表单模式以确保它们不会隐藏它。

答案 2 :(得分:-1)

唯一可行的方法是,如果你知道视频的长度。然后,您可以将OnTimer事件置于“让计算机进入睡眠状态”指定的时间内。