[[20120126224051]] 『すみません!メディアプレーヤーを貼り付けたいで』(LALA) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『すみません!メディアプレーヤーを貼り付けたいです!』(LALA)

VBA で お願いしたいのですが、

まず、a1が "1" の場合、

ウインドウズメデイアプレーヤー を貼り付けて

"C:\mci\MONGOL800 あなたに.mpg"

を流したいです。

更になのですが、

処理中の とある計算が終わると、

終了して、

メディアプレーヤーごと、delete したいと思っています。

どうかおねがいします!!!

エクセル2010です!


[[20120114193018]]
 ここの続きですか?

 ここで提示した方法は、一つの例です。シートに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.