[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『メデイアプレーヤーをバックグランドで使う方法』(マルコ)
>セブンとExcel2010ではメディアプレーヤーが手前に表示されてしまい この辺りの説明をもう少し、詳細にされてみては? いかがですか?
そもそもこのメディアプレーヤーコントロールをどこに配置しているのですか? ユーザーフォームですか? シートですか?
この現象になるオペレーションの記述は必要ですよ!!
Excel2007で正常に作動していて、2010では、作動しないブックを作成する 作成手順を記述してみては? いかがですか
ichinose
そもそもこのファイルは30秒に一回動作させるマクロを使って、特定のセルの値が一定の値を超えたときに
「警報1」(wav)を、さらにその値を超えたときに「警報2」(wav)を鳴らすものです。
そして警報を解除するときにマクロを登録したボタンをクリックするのですが、その際にも誤操作防止のた
めに「確認音」(wav)を鳴らすというものです。
wavファイルはシートに貼り付けてあります。
「挿入」→「オブジェクト」→「ファイルから」の順で挿入しました。
>メディアプレーヤーコントロールをどこに配置しているのですか?ユーザーフォームですか? シートですか?
このあたりが自分でもよくわかりませんので、マクロの記述を添付します。
If Range("X97").Value = 0 Then
Range("A1").Select
ElseIf Range("X97").Value = 1 Then
Range("A396:Y398").Select この部分に警報の内容を示す文と挿入したwavファイルを貼り付けています
ActiveSheet.Shapes("Object 24").Select 「Object 24」は挿入したwavファイルです。
Selection.Verb Verb:=xlPrimary これがメディアプレーヤーの部分だと思いますが、この学校で示された例をそのまま貼り付けました
ElseIf Range("X97").Value = 2 Then
Range("A399:Y401").Select
ActiveSheet.Shapes("Object 25").Select
Selection.Verb Verb:=xlPrimary
End If End Sub
これを自宅のパソコン(VISTAとExcel2007)で作成しました。
警報が鳴り出すと画面上にメディアプレーヤーが出ますが、一度エクセルをクリックする
とエクセルがアクティブになり、以後警報が鳴ってもメディアフレーヤーが手前に表示さ
れることもなく、エクセルがアクティブのままです。
それが職場のパソコン(セブンとExcel2010)では警報が鳴り出すたびにメディアプレーヤー
がエクセルより手前に出て、メディアプレーヤーがアクティブのままになります。
メディアプレーヤーは手前に表示されてもかまいませんが、メディアプレーヤーがアク
ティブの状態のままになると、警報を解除するボタンを操作するのにエクセルをアクティ
ブにする操作が増えるため、ダブルクリックのような形になってしまいます。
その解決方法をおたずねします。
初心者の説明でわかりずらいかと思いますが、よろしくお願いいたします。
試行1
Sub test2()
If Range("X97").Value = 0 Then
Range("A1").Select
ElseIf Range("X97").Value = 1 Then
Range("A396:Y398").Select
ActiveSheet.OLEObjects("Object 24").Verb Verb:=xlPrimary
ElseIf Range("X97").Value = 2 Then
Range("A399:Y401").Select
ActiveSheet.OLEObjects("Object 25").Verb Verb:=xlPrimary
End If
Application.WindowState = xlMinimized
Application.WindowState = xlMaximized
End Sub
これをまず、試してみてください。尚、VBEは閉じた状態で試してください。
これで駄目なら、APIですが、Win7と仰ってるので面倒かなあ・・・。 因みにこれは、サウンドオブジェクトですね
色々やってだめなら、メディアプレーヤーコントロールの使用も考慮してみましょう。
ichinose
お世話になります。
さっそく自宅のパソコンで試してみました。
ActiveSheet.OLEObjects("Object 24").Verb Verb:=xlPrimary
ここの記述でデバックがかかってしまいました。
ActiveSheet.Shapes("Object 24").Select
Selection.Verb Verb:=xlPrimary
とりあえず元の記述に戻して
Application.WindowState = xlMinimized
Application.WindowState = xlMaximized
を付け加えてみました。
自宅のパソコンでは正常に動作していますので、これを職場のパソコンで試してみます。
本日は泊り勤務になりますので、明日の夜にご報告いたします。
ありがとうございました。
これは素人の思いつきですが、メディアプレーヤーを閉じる方法はあるものでしょうか?
エクセルを常に手前に表示する方法は、この学校でみつけて試したことがあります。手前に表示されてもエク
セルがアクティブにならないので諦めましたが、エクセルを常に手前に表示させ、警報が鳴り終わったあとに
メディアプレーヤーを閉じれば、エクセルがアクティブになるのでは・・・ と、素人的に考えました。
もっともメディアプレーヤーの閉じ方がまったく見当もつかないのですが…
>これで駄目なら、APIですが
>メディアプレーヤーコントロールの使用も考慮してみましょう
シートとフォームの違いもわからない素人ですが、できるかぎりついていきますので、ご指導いただけました
ら幸いです。
よろしくお願いいたします。
試行2
Option Explicit
Public Declare Function SetWindowPos Lib "USER32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
ByVal X As Long, ByVal Y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long
Public Const walways = -1 '常に手前にセット
Public Const wreset = -2 '解除
Public Const wdisp = &H40 '表示する
Public Const w_SIZE = &H1 'サイズを設定しない
Public Const w_MOVE = &H2 '位置を設定しない
Sub Excelを常に手前に設定()
Dim hWnd As Long
hWnd = Application.hWnd
Call SetWindowPos(hWnd, walways, 0, 0, 0, 0, wdisp Or w_SIZE Or w_MOVE)
End Sub
Sub Excelを常に手前に設定解除()
Dim hWnd As Long
hWnd = Application.hWnd
Call SetWindowPos(hWnd, wreset, 0, 0, 0, 0, wdisp Or w_SIZE Or w_MOVE)
End Sub
Sub test3()
Excelを常に手前に設定
If Range("X97").Value = 0 Then
Range("A1").Select
ElseIf Range("X97").Value = 1 Then
Range("A396:Y398").Select
ActiveSheet.OLEObjects("Object 24").Verb Verb:=xlPrimary
ElseIf Range("X97").Value = 2 Then
Range("A399:Y401").Select
ActiveSheet.OLEObjects("Object 25").Verb Verb:=xlPrimary
End If
Excelを常に手前に設定解除
End Sub
尚、私が確認できないので試してください。 Win7では、32APIでエラーになる件
http://officetanaka.net/excel/excel2010/011.htm
対処法がありますから、これを参考に試してみてください。
ichinose
Sub test3()の前に「手前に設定」というオプションが付けられるのですね。
これだけでもいい勉強になりました。ありがとうございます。
これも職場で試してみます。
ちなみに本日も泊り勤務になりますので、明日以降のご報告となります。
いつも本当にありがとうございます。
試行2の結果ですが、理解に苦しむ結果となりました。
最初はうまくいったと思ったのですが…
メデイァプレーヤーが起ちあがる前にSub test3()を実行すると、エクセルが手前のまま警報が鳴り、メディアプレーヤー
はエクセルの背面で、エクセルがアクティブの状態でした。まさに私の望む状態でした。
しかし、その状態(エクセルが手前でアクティブ、メディアプレーヤーは背面)でSub test3()を再度実行すると、
なぜかメディアプレーヤーが手前になりアクティブになってしまいます。
ちなみに自宅のパソコン(VISTA)ではまったく逆で、メディアプレーヤーが起ちあがる前にSub test3()を
実行すると、メディアプレーヤーが手前に出て、メディアプレーヤーが起ちあがっている状態でSub test3()
を実行すると、エクセルが手前でアクティブになります。
このマクロを「試行2」の後の
Option Explicit
から
Excelを常に手前に設定解除
End Sub までを標準モジュールのModule9に一まとめにしているのですが、それが原因でしょうか? Module9の中では Option Explicit Sub Excelを常に手前に設定() Sub Excelを常に手前に設定解除() Sub test3() に分かれていて、この中の Sub test3()を実行しています。
だれかに意見を聞く前に、自分で考えて実行してから聞くのが筋ではありますが、何分にも私の理解を
はるかに超えておりますので、ichinose様に頼りきっております。
ご迷惑をおかけいたしますが、よろしくお願いいたします。
実際に私がデバッグできれば、よいのですが、細かいテストが出来ないので こっちの方がはやいかなあ
ここからは、仕様を変えるのでマルコさん側でも検討して頂かなくてはなりません。
今までは、サウンドオブジェクトを鳴らすという仕様でしたが、 今度は、Wavファイルを鳴らすという仕様です。 よって、WAVファイルも一緒に必要になります。
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long '0: 同期 '1: 非同期 'APIの宣言↑ Sub 試行3() Dim ifile$ '↓フルパスサウンドファイル名 ifile$ = ThisWorkbook.Path & "\何かのWAvファイル.wav" sndPlaySound ifile$, 1 End Sub
常に外部にwavファイルが必要になる点が異なってきます。
ichinose
お世話になります。
ただいま私は遅いゴールデンウイークということで休暇をとっております。
すぐに試すことができませんので、報告はしばらくお待ちください。
先日、私なりにもいろいろと試してみました。
以前ichinoseさんがほかの方へアドバイスされていた、メディアプレーヤーコントロールというのにもチャレンジ
しましたが、メディアプレーヤーの貼り付け方がわからない・・・という初心者レベルの挫折をしました。
今回のAPIというのも早速試してみます。
現在このファイルはXPパソコンで試用として活用しています。これで成果が認められれば予算もついて専用
パソコンを購入できるのですが、新品のパソコンを使ったとたんに使用できなくなるのでは話になりませんので
困っておりました。
いつも本当にお世話になります。 ありがとうございます。
お世話になります。
先ほど帰宅しましたので、自宅のパソコンで試してみました。
試行3の場合、
>常に外部にwavファイルが必要になる点が異なってきます。
と、ありますが、現在試しているbookのどこかにwavファイルを挿入するということでしょうか。
ちなみに
ifile$ = ThisWorkbook.Path & "\何かのWAvファイル.wav" この部分を ifile$ = ThisWorkbook.Path & "C:\音声案内\1.wav" ←音声案内というフォルダ内の1というwavファイル としたのですが、試行3を実行しても何の反応もありません。何かのWAvファイル というのは鳴らしたいwav ファイルのリンク先ではだめなのでしょうか。 よろしくお願いいたします。
マルコ
まず、
sub check1() msgbox ThisWorkbook.Path & "C:\音声案内\1.wav" end sub
同じモジュールに上記のコードをコピーして、表示されるパスを確認してください
正しいパスが表示されていますか?
api sndPlaySoundは、存在しないWAVファイルを指定してもプログラムは 止まりません。
これで再度、検討してみてください
ichinose
お世話になります。
試行3は成功しました。
作成したエクセルファイルとWAVファイルを同じフォルダに入れなければだめだったのですね。
初歩的なミスでつまづいてしまいました。
明日、試行3を職場のパソコンで試してみます。
ありがとうございました。
お世話になります。 マルコです。
試行3は職場のパソコン(Win7とExcel2010)でも正常に動作しました。
現在自宅パソコンでメディアプレーヤーの部分を修正しています。
まずAPIの宣言をして、メディアプレーヤーの部分
ActiveSheet.OLEObjects("Object 24").Verb Verb:=xlPrimary
を下記のように書き換えたところ、うまく警報を出すことができました。
Dim ifile$ '↓フルパスサウンドファイル名 ifile$ = ThisWorkbook.Path & "\何かのWAvファイル.wav" sndPlaySound ifile$, 1
ichinoseさんには親切丁寧に教えていただきましてありがとうございます。
私にとってAPIというものはまだ「秘密の呪文」の域ですが、教えていただいたことを参考にいろいろな場面で
応用してまいります。
このたびは本当にありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.