[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『すみません!メディアプレーヤーを貼り付けたいです!』(LALA)
VBA で お願いしたいのですが、
まず、a1が "1" の場合、
ウインドウズメデイアプレーヤー を貼り付けて
"C:\mci\MONGOL800 あなたに.mpg"
を流したいです。
更になのですが、
処理中の とある計算が終わると、
終了して、
メディアプレーヤーごと、delete したいと思っています。
どうかおねがいします!!!
エクセル2010です!
ここの続きですか?
ここで提示した方法は、一つの例です。シートにWindowsMediaPlayerコントロールを VBAで貼り付けたり、削除したりするコードは、マクロの記録でコードが 作成されるはずです。
が、シートとWindowsMediaPlayerコントロールのようなActiveXControlの相性なんでしょうか、動的にコントロールの作成・削除を行うことでバグが発生しています。 予めコントロールを作成(貼り付け)して使う分には、便利なところは山ほどあるんですけどねえ。
で、どうするか?
1 WindowsMediaPlayerコントロールをシートではなく、 ユーザーフォームに貼り付けたものを用意しておき、 必要に応じて、そのユーザーフォームを表示させ音をだし、 その役目が終わったら、WindowsMediaPlayerコントロールの音だしを止めて ユーザーフォームを閉じる。
2 予めシートに貼り付けてあるWindowsMediaPlayerコントロールの初期設定を 非表示にしておき、必要に応じて表示させ音をだし、 その役目が終わったら、音だしを止めて、再び非表示にする。 尚、非表示のままでも音楽を演奏したり、止めたりすることはできます。 因みに表示・非表示は、Visibleプロパティの True/Falseです。
私がやるなら、1 です。 基本的にシートを触らせるようなコードを殆ど書かなくなってしまったので・・・。
ユーザーフォームの方が必要なときだけ、インスタンスを作成する方法なので こっちの方がちょっとだけよいのかなあ、でも、どっちでもいいか・・。
>a1が "1" の場合、 ここは、セルA1の中身をチェックすればよいですよね? それともA1に1が入力されたら、直ちに音楽をながしたいのでしょうか?
この場合は、シートのChangeイベントでセルA1の中身をチェックします。
>処理中の とある計算が終わると、 これは、もう少し具体的に説明してください。
ichinose
良い事教えてもらい有難う御座います!
>予めコントロールを作成(貼り付け)して使う分には、 >便利なところは山ほどあるんですけどねえ。
そうなんですね!
実は、少々困っていることがあります。
パソコンが二台あります。
ディスプレイが2台あります。
パソコンAは、デジタル1とアナログ2で、
画面を拡張機能させています。
パソコンB はアナログ2で 繋いであります。
パソコンBのディスプレイは、Aのパソコンのアナログ2と
PC CHANGER で スイッチングをして
画面を切り替えています。
ここに来る前に 色々試すのですが、
馬鹿な私には、ユーザーフォームの位置を制御する方法が
解りませんでした。
因みに、このエクセルはパソコンAで使用します。
ですので、私的には、1番を考えましたが、無理でした。
Sub PlayMovie()
Dim FilePath As String
ActiveSheet.OLEObjects.Add(ClassType:="WMPlayer.OCX.7", Link:=False, _
DisplayAsIcon:=False, Left:=171.75, Top:=94.5, Width:=183.75, Height _ :=180).Select
' 前の奴を開いていたら閉じる Call WindowsMediaPlayer1.Close
' "movie.wmv"っていう名前のファイルを再生する
FilePath = "C:\mci\MONGOL800 あなたに.mpg"
' ファイル名を設定する
WindowsMediaPlayer1.URL = FilePath
' 再生を開始する
Call WindowsMediaPlayer1.Controls.Play
End Sub
そこで、上記の様に WEBで探してきて、マクロ記録と足してみたり、
ichinoseさんのメトロノームを研究したり、
でも、無理でした!! OTL
2番が いいです。
でも1番でもいいです。 デジタルの左端 と決めることが出来るなら、
それがいいです。
>シートのChangeイベントでセルA1の中身をチェックします。
これは、使う人が、1を選ぶと、あなたに♪ という事なので、
1が入力された時点で、♪プレイされなくてもいいんです。
1を入力させておき コマンドボタンを押すと そのパスを見つけて、
計算と、映像を流したいと 思いました!!
贅沢ですね。 ora
Chengeイベントでなくても セレクトケースというのでしょうか
条件で分岐させるという事でも OKなんです!!
とある計算と云うのは、下記です。
オフィス田中さんのページで、
わたしなりに、やってみました。
一応動きます。
この間に映像をと思いました。
お願いします!!
Private Sub 商品コード起動()
Dim WshShell Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "C:\pos_system\bin\SyoCode.exe", vbNormalFocus, False
Dim hwindow As Long Do hwindow = FindWindow(vbNullString, "商品マスター") If hwindow <> 0 Then Exit Do End If Loop
Sleep 500 WshShell.SendKeys ("{DOWN}"), True Sleep 500 WshShell.SendKeys ("{ENTER}"), True Sleep 500 WshShell.SendKeys ("{ENTER}"), True Sleep 500 WshShell.SendKeys ("{ENTER}"), True Sleep 500 WshShell.SendKeys ("{F6}"), True Sleep 500 WshShell.SendKeys ("{TAB 3}"), True Sleep 500 WshShell.SendKeys ("{ENTER}"), True Sleep 500 WshShell.SendKeys ("{TAB 4}"), True Sleep 500 WshShell.SendKeys ("{ENTER}"), True Sleep 500 WshShell.SendKeys ("{F9}"), True Sleep 500 WshShell.SendKeys ("{DOWN 6}"), True Sleep 500 WshShell.SendKeys ("{TAB}"), True Sleep 500 WshShell.SendKeys ("{ENTER}"), True Sleep 800 WshShell.SendKeys ("%S"), True Sleep 800 WshShell.SendKeys ("%Y"), True
Do hwindow = FindWindow(vbNullString, "データ収集中...") If hwindow <> 0 Then Exit Do End If Loop
Do hwindow = FindWindow(vbNullString, "Syou") If hwindow <> 0 Then Exit Do End If Loop
Sleep 800 WshShell.SendKeys ("%N"), True
Do hwindow = FindWindow(vbNullString, "商品マスター") If hwindow <> 0 Then Exit Do End If Loop
Dim WD Set WD = CreateObject("Word.Application")
Do If WD.Tasks.Exists("商品マスター") Then WD.Tasks("商品マスター").Close Exit Do End If Loop
Sleep 1500
Do hwindow = FindWindow(vbNullString, "商品マスター") If hwindow <> 0 Then Exit Do End If Loop
Do If WD.Tasks.Exists("商品マスター") Then WD.Tasks("商品マスター").Close Exit Do End If Loop
WD.Quit Set WD = Nothing Set WshShell = Nothing
' Sleep 1000
End Sub
>こっちの方がちょっとだけよいのかなあ、でも、どっちでもいいか・・。
と申し上げたのは、シートに貼り付けて使う場合は、 予め手動操作で適当なシートにWindowsMediaPlayerコントロールを貼り付けておいて、 必要に応じて表示させ、必要なくなったら非表示するという運用です。
>ActiveSheet.OLEObjects.Add(ClassType:="WMPlayer.OCX.7", Link:=False, _ > DisplayAsIcon:=False, Left:=171.75, Top:=94.5, Width:=183.75, Height _ > :=180).Select
↑このような動的に作成するコードには、 前回も投稿したようにバグ(だと私は思っている)があります。
大きな例として、モジュールレベルの変数が動的に作成・削除によって、 初期化されてしまう現象です。
http://www.vbalab.net/vbaqa/c-board.cgi?cmd=one;no=7011;id=excel
もう10年前になりますが、私も質問したことがあります。
現状、モジュールレベルの変数は使ってないから・・・、 将来的にも使うことがありませんか? 解決策のヒントもありますが、面倒なことは確かです。
>ユーザーフォームの位置を制御する方法が 位置は、ユーザーフォームのLeft,Topプロパティで制御します。
ユーザーフォームで運用する例を挙げます。
新規ブックにて、ユーザーフォームを一つ作成してください(Userform1とします、 本当は、FrmPlayerとかそれ相応の名前を命名してください)。
これにWindowsMediaPlayerを一つ貼り付けてください。 ツールボックスにWindowsMediaPlayerが見当たらない場合、 ツールボックスを表示した状態で「ツール」---「その他のコントロール」とクリックし、 コントロールの追加ダイアログを表示させ、一覧から「WindowsMediaPlayer」を探し、チェックしてください。 OKボタンで、ツールボックスのWindowsMediaPlayerコントロールが追加されます。
これでユーザーフォームに追加してください。
WindowsMediaPlayerコントロール(WindowsMediaPlayer1)が貼り付けられたUserform1のモジュールに
Option Explicit Sub play(ByVal filepath As String, Optional ByVal repcnt As Long = 1) '指定ファイルを演奏する 'filepath 演奏するファイルパス 'repcnt 演奏回数(規定値1) With WindowsMediaPlayer1 .URL = filepath .settings.playCount = repcnt .Controls.play End With End Sub Sub pstop(Optional ByVal cls As Boolean = False) '演奏をストップする 'cls true ユーザーフォームも閉じる With WindowsMediaPlayer1 .Controls.stop .Close End With DoEvents If cls Then Unload Me End Sub Private Sub UserForm_Activate() WindowsMediaPlayer1.settings.autoStart = False End Sub
以上です。
使い方は、
標準モジュールに
Sub test() With UserForm1 .Show vbModeless .play "C:\mci\MONGOL800 あなたに.mpg" End With End Sub Sub test2() UserForm1.pstop True End Sub
以上です。
実際に提示したユーザーフォームのメソッドをどこに入れるかは 考えてみてください。
このように メディアプレーヤーにやらせたい仕事は、すべて WindowsMediaPlayerコントロール(WindowsMediaPlayer1)が貼り付けられた Userform1内で行い、パラメータの指定で他のプログラムでも簡単に利用できるように 作成しておくと、次回はこれの利用が楽だと思いませんか?
本当は、前回のスレッドで投稿したフェードアウト(アウトがあるなら、フェードインも)メソッドとしてここに記述すると良いのですけどねえ。
>Tasks へえ、Wordには、他のプロセスを管理するようなコレクションがあるんですねえ!! APIをラップしたのかなあ・・・、Excelでも出来ればよいのに・・・。
ichinose
ichinose
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.