Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6917 / 13646 ツリー ←次へ | 前へ→

【41987】メディアプレーヤーについて カッチャン 06/8/28(月) 11:45 発言[未読]
【41994】Re:メディアプレーヤーについて neptune 06/8/28(月) 14:55 発言[未読]
【42006】Re:メディアプレーヤーについて ichinose 06/8/29(火) 7:47 発言[未読]
【42031】Re:メディアプレーヤーについて カッチャン 06/8/30(水) 4:02 お礼[未読]
【42032】再度:メディアプレーヤーについて(ichinos... カッチャン 06/8/30(水) 5:43 質問[未読]
【42037】Re:再度:メディアプレーヤーについて(ichi... ichinose 06/8/30(水) 9:28 発言[未読]
【42077】Re:再度:メディアプレーヤーについて(ichi... カッチャン 06/8/31(木) 8:19 質問[未読]
【42079】Re:再度:メディアプレーヤーについて(ichi... ichinose 06/8/31(木) 9:09 発言[未読]
【42103】Re:再度:メディアプレーヤーについて(ichi... カッチャン 06/9/1(金) 9:45 質問[未読]
【42111】Re:再度:メディアプレーヤーについて(ichi... ichinose 06/9/1(金) 13:01 発言[未読]
【42162】Re:再度:メディアプレーヤーについて(ichi... カッチャン 06/9/3(日) 10:30 質問[未読]
【42166】Re:再度:メディアプレーヤーについて(ichi... ichinose 06/9/3(日) 14:44 発言[未読]
【42352】Re:再度:メディアプレーヤーについて(ichi... カッチャン 06/9/7(木) 17:22 お礼[未読]

【41987】メディアプレーヤーについて
発言  カッチャン E-MAIL  - 06/8/28(月) 11:45 -

引用なし
パスワード
    3年程前にこのサイトでメディアプレーヤーについてご教授いただき使ってきましたが、最近そのプログラムを使おうとしたら、「オブジェクトがありません」と言うような
エラーが発生いたしました。
 少し調べたら、まえはWindows2000、Office2000だったのが、現在使っているのは
WindowsXP,Office2003のためではと思われます。それで、メディアプレーヤーを
ウィンドーズメディアプレーやに変更し、VBAも変更してどうにか対応が出来たのです
が、現在のシステムと前のシステムで互換性がなくなりました。
それで、つぎのことをご教授くださいますようお願いいたします。

1. メディアプレーヤーとウィンドーズメディアプレーとは同じ物ではないので
  しようか?(メディアプレーヤーの開始場面ではWindowsMediaPlayerの
  表示がされるのに)
2. Windows2000、Office2000でウィンドーズメディアプレーを使う方法と
  WindowsXP,Office2003でメディアプレーを使う方法?。
3. 出来たら両システムで共用できるようにするには(メディアプレーの使用に
  こだわらないのですが)どうしたら良いのでしょうか?

 よろしくお願いいたします。

【41994】Re:メディアプレーヤーについて
発言  neptune  - 06/8/28(月) 14:55 -

引用なし
パスワード
   ▼カッチャン さん:
>1. メディアプレーヤーとウィンドーズメディアプレーとは同じ物ではないので
>  しようか?(メディアプレーヤーの開始場面ではWindowsMediaPlayerの
>  表示がされるのに)
これは知りません。O/S、バージョンによっては異なってくるという意味では
異なるものといえるかもしれません。

>2. Windows2000、Office2000でウィンドーズメディアプレーを使う方法と
>  WindowsXP,Office2003でメディアプレーを使う方法?。
>3. 出来たら両システムで共用できるようにするには(メディアプレーの使用に
>  こだわらないのですが)どうしたら良いのでしょうか?
何がしたのか知りませんのでなんともいえませんが、
mciSendString、mciSendCommandなどのmsiコマンドAPIを使って、
直接MCIを動かす手はあります。音声、動画など。
※MCI(Multimedia Control Interface)・・マルチメディアのコントロールインタフェース

ただ、O/S、MCIのバージョンによってサポートされる機能は違ってきますから
バージョンによって機能を選択するようにしておけばどうでしょう?

・・・・サンプルは
「MCI mciSendString VB」のキーワードでググッて見てください。
結構あるようです。但し、込み入ったものはC言語から解析するスキルが
必要になるようです。(VBで少しだけ遊びでやったことしかないので
この程度です。VBAで安定してできるかどうかは不明です。)

【42006】Re:メディアプレーヤーについて
発言  ichinose  - 06/8/29(火) 7:47 -

引用なし
パスワード
   ▼カッチャン さん:
おはようございます。

クライアントプログラムの欠点ですね!!

>1. メディアプレーヤーとウィンドーズメディアプレーとは同じ物ではないので
>  しようか?(メディアプレーヤーの開始場面ではWindowsMediaPlayerの
>  表示がされるのに)
これは、違うコンポーネントということでしょうねえ!!

>2. Windows2000、Office2000でウィンドーズメディアプレーを使う方法と
>  WindowsXP,Office2003でメディアプレーを使う方法?。
>3. 出来たら両システムで共用できるようにするには(メディアプレーの使用に
>  こだわらないのですが)どうしたら良いのでしょうか?
上記のふたつのシステムでの共用ということなら、
メディアプレーヤーコントロールを動的にアロケーションするという方法も
考えられます。
つまり、予めユーザーフォームにはメディアプレーヤーコントロールを配置せず、

UserForm_Initialize()イベントプロシジャー等で
コードによって配置する方法です。


これは、私の環境での話です(Win98&Excel2000とWin2000&Excel2002)が、

'================================
Private Sub UserForm_Initialize()
  Dim cc As MSForms.Control
  On Error Resume Next
  Set cc = Controls.Add("MediaPlayer.MediaPlayer.1")
  If Err.Number <> 0 Then
    Set cc = Controls.Add("WMPlayer.OCX.7")
    End If
  cc.Visible = True
End Sub


このようにすると、存在するメディアプレーヤーコントロールが配置されます。
もちろん、その後のコードも配置されたコントロールによってコードを分けなければ
ならない箇所もあると思いますけど。

実際の環境での
"WMPlayer.OCX.7"等のProgidが分からなければ、
シートにメディアプレーヤーコントロールを貼り付ける操作をマクロの記録を行って見てください(コントロールツールボックスのコントロールの選択というアイコンをクリックして、メディアプレーヤーコントロールを探してください)。
これにより、作成されたコード内にProgidを発見できると思います。

但し、環境はどんどん変わっていきますから、上記のコードだと応急処置にしかなりませんけどね。

【42031】Re:メディアプレーヤーについて
お礼  カッチャン E-MAIL  - 06/8/30(水) 4:02 -

引用なし
パスワード
   色々丁寧な解答を頂きありがとうございました。
APIの方はうまく扱えませんが、そんなことばっかり言っておれませんので、これを
機会に勉強しようと思います。
 またichinoseさんには、以前メディアプレーヤーについてご教授いただいた方で
再度ご教授いただきましたことに感謝申し上げます。
 これまで問題なくメディアプレーヤが使えるようになっていたのですが、まだまだ
勉強不足ですが頑張ります。
 VBAでコントロールをアロケーションすると言う方法に感心しています。
皆様、本当にありがとうございました。

【42032】再度:メディアプレーヤーについて(ichin...
質問  カッチャン E-MAIL  - 06/8/30(水) 5:43 -

引用なし
パスワード
   Private Sub UserForm_Initialize()〜End Sub の内、Controls.Addを
OLEObjects.Addに変更したらW2000,Ex2000でうまく作動しました。
その後、そのプログラムをWxp,Ex2003で試したところ、両方(メディアプレーヤーと
ウインドウズメディアプレヤーが表示されました。Ex2003にはメディアプレーヤが
どこかに含まれているものと思われます。
 何故そうなるのかと調べていくと、Set cc= でMediaPlayer.MediaPlayer.1 の
オブジェクトを追加すると、エラー13(型が一致しません)が発生していました。
このため、Ex2003では 次の Set cc= で WMPlayer.OCX.7 も実行されることに
なります。
 エラー13の原因がわからないので、ご教授お願いいたします。

【42037】Re:再度:メディアプレーヤーについて(ic...
発言  ichinose  - 06/8/30(水) 9:28 -

引用なし
パスワード
   ▼カッチャン さん:
おはようございます。

>Private Sub UserForm_Initialize()〜End Sub の内、Controls.Addを
>OLEObjects.Addに変更したらW2000,Ex2000でうまく作動しました。
>その後、そのプログラムをWxp,Ex2003で試したところ、両方(メディアプレーヤーと
>ウインドウズメディアプレヤーが表示されました。Ex2003にはメディアプレーヤが
>どこかに含まれているものと思われます。
> 何故そうなるのかと調べていくと、Set cc= でMediaPlayer.MediaPlayer.1 の
>オブジェクトを追加すると、エラー13(型が一致しません)が発生していました。
>このため、Ex2003では 次の Set cc= で WMPlayer.OCX.7 も実行されることに
>なります。
> エラー13の原因がわからないので、ご教授お願いいたします。
ちょっと、時間とれずきちんと検証していませんが、
エラー13は、「型が一致しません」というエラーです。
試しに

dim cc as object

という型宣言で試してみてください。

これでも13というエラーが出ますか?

今日は、もう投稿の時間が持てません。
解決しなかったら、どなたかよろしくお

【42077】Re:再度:メディアプレーヤーについて(ic...
質問  カッチャン E-MAIL  - 06/8/31(木) 8:19 -

引用なし
パスワード
   ありがとうございました。「型が違う」というエラーは発生しなくなりました。
しかし、また問題が発生しました。
 Set cc = Controls.Add("MediaPlayer.MediaPlayer.1") '..1.
  If Err.Number <> 0 Then
    Set cc = Controls.Add("WMPlayer.OCX.7")  ’  ..2.
  End If
MediaPlayerがあるシステムでは問題ないのですが、無いシステムでは1.でエラーを
発生するのではなく、仮のオブジェクトが作成され(無地の四角いボックス)、それから
WMPlayerが作製されます。
 MediaPlayerかWMPlayerが存在するか否かを判断するものがないのでしょうか。
また、今はスライドショウのようなプログラムで、写真やMovieが見れるもので使って
いるのですが、メディアプレーヤーなどを表示したり、消したりするのには
 CC.visible=false などとしていますが、ここでもオブジェクトがありません
等のエラーがでます。このことにもお教えください。

お忙しいこととは思いますが、よろしくお願いいたします。

【42079】Re:再度:メディアプレーヤーについて(ic...
発言  ichinose  - 06/8/31(木) 9:09 -

引用なし
パスワード
   ▼カッチャン さん:
>ありがとうございました。「型が違う」というエラーは発生しなくなりました。
>しかし、また問題が発生しました。
> Set cc = Controls.Add("MediaPlayer.MediaPlayer.1") '..1.
>  If Err.Number <> 0 Then
>    Set cc = Controls.Add("WMPlayer.OCX.7")  ’  ..2.
>  End If
>MediaPlayerがあるシステムでは問題ないのですが、無いシステムでは1.でエラーを
>発生するのではなく、仮のオブジェクトが作成され(無地の四角いボックス)、それから
>WMPlayerが作製されます。
仮のオブジェクト??ですか、私の環境では作成されませんでした
(Win2000 & Excel2002)
でも、WMPlayerが作成されるということは
エラートラップは発生しているということですね?

ならば、
> Set cc = Controls.Add("MediaPlayer.MediaPlayer.1") '..1.
>  If Err.Number <> 0 Then
    controls.remove controls.count-1
>    Set cc = Controls.Add("WMPlayer.OCX.7")  ’  ..2.
>  End If
として、作成された仮のオブジェクトを削除してみてはいかがですか?
Excel2003を持っていないので私のほうで確認はしていません。

【42103】Re:再度:メディアプレーヤーについて(ic...
質問  カッチャン E-MAIL  - 06/9/1(金) 9:45 -

引用なし
パスワード
   ▼色々ご指導ありがとうございます。
前の質問の内容が間違っていました。
 MediaPlayerが無いシステムでは1.でエラーを>発生するのではなく、仮のオブジェクト(オブジェクト35などと表示)が作成され(無地の四角いボックス)るだけです。「それから>WMPlayerが作製されます。」と言う部分が間違いでした。
 つまり、なくてもエラーが発生しないと言うことです。(色々試していて、混乱して
間違ったことを申し上げ失礼しました。)

 また、コマンドボタンをクリックすることで、MediaplayerかWindowsMediaPlayerを
非表示にさせようと思って
Private Sub CommandButton1_Click()
 CC.visible=false
end sub
としましたら
Of2000ではMediaPlayerは× WindowsMediaPlayerは〇
Of2003ではMediaPlayerは〇 WindowsMediaPlayerは×でした。
〇は正しく非表示になるのですが、×では「オブジェクト変数またはWithブロック変数が設定されていません」というエラー表示がされます。
 よろしくお願いいたします。

【42111】Re:再度:メディアプレーヤーについて(ic...
発言  ichinose  - 06/9/1(金) 13:01 -

引用なし
パスワード
   ▼カッチャン さん:
こんにちは。

う〜ん、Excel2002でもちょっと現象は違いますが、
Dim cc as object と宣言した変数では、
cc.Visible=False で非表示にはなりませんでした。
(Friendキーワードでも付いてるのかな?)

で以下のコードの結果を確認してください

Private Sub UserForm_Activate()
  Dim cc As Object
  Dim tcon As MSForms.Control
  On Error Resume Next
  Set cc = Controls.Add("MediaPlayer.MediaPlayer.1")
  If Err.Number <> 0 Or TypeName(cc) <> "MediaPlayer" Then
    With Controls
     .Remove .Count - 1
     End With
    Set cc = Controls.Add("WMPlayer.OCX.7")
    '実際にはここでもErrとTypenameで確認する
    Set tcon = cc
  
  Else
    Set tcon = cc
    End If
  tcon.Visible = False
  MsgBox "消えた?"
  tcon.Visible = True
'使う時はちゃんと型宣言した変数で操作する
End Sub


これもExcel2003では未確認ですが・・・。

【42162】Re:再度:メディアプレーヤーについて(ic...
質問  カッチャン E-MAIL  - 06/9/3(日) 10:30 -

引用なし
パスワード
   >Private Sub UserForm_Activate()
>  Dim cc As Object
>  Dim tcon As MSForms.Control
   On Error Resume Next
>  Set cc = Controls.Add("MediaPlayer.MediaPlayer.1")
>  If Err.Number <> 0 Or TypeName(cc) <> "MediaPlayer" Then
   Set cc = OLEObjects.Add("MediaPlayer.MediaPlayer.1")  ' 1.
   If Err.Number <> 0 Or cc.Name <> "MediaPlayer1" Then  ' 1.
>    With Controls       ' 2.
>     .Remove .Count - 1   ' 2.
>     End With
>    Set cc = OLEObjects.Add("WMPlayer.OCX.7")  ' 1.
>    '実際にはここでもErrとTypenameで確認する
>    Set tcon = cc      ' 3.  
>
>    End If
>  tcon.Visible = False     ' 4. 
>'使う時はちゃんと型宣言した変数で操作する  ' 5.
>End Sub

いろいろお世話になっています。
調べてみましたら、MediaPlayerとWindowsMediaPlayerの両方が作成されると言いましたが、お教えいただいたオブジェクトの名前を書かせる命令で調べたら「オブジェクト〇〇」となっていました。旗の絵柄が表示されたのでうまく作成されたのだと早ガッテンしてしまいました。
 それで、私のシステムでは1.の用に変更していますが、2.では「オブジェクトは、このプロパティまたはメソッドをサポートしていません」と言うエラー表示になります。
仮に作成されるオブジェクト(「オブジェクト〇〇」)をどのようにして消したらよいか。
 また、3.では「オブジェクト変数またはWithブロック変数が設定されていません」と言うエラー表示になります。このためオブジェクトの表示・非表示の4.が確認できません。
 5.はDim ccやDim tconのことかなと思い、何ら他のことは行なっていません。
よろしくお願いいたします。

【42166】Re:再度:メディアプレーヤーについて(ic...
発言  ichinose  - 06/9/3(日) 14:44 -

引用なし
パスワード
   ▼カッチャン さん:
こんにちは。
OleObject??
メディアプレーヤーはどこに貼り付けることを想定しているのですか?
ユーザーフォームですか? シートですか?
それと
>>Private Sub UserForm_Activate()
>>  Dim cc As Object
>>  Dim tcon As MSForms.Control
>   On Error Resume Next
>>  Set cc = Controls.Add("MediaPlayer.MediaPlayer.1")
>>  If Err.Number <> 0 Or TypeName(cc) <> "MediaPlayer" Then
>   Set cc = OLEObjects.Add("MediaPlayer.MediaPlayer.1")  ' 1.
このコード↑


>   If Err.Number <> 0 Or cc.Name <> "MediaPlayer1" Then  ' 1.
>>    With Controls       ' 2.
>>     .Remove .Count - 1   ' 2.
>>     End With
>>    Set cc = OLEObjects.Add("WMPlayer.OCX.7")  ' 1.
又は  ↑このコードのどちらか正常に作動しているのですか?
どちらも作動しないと思いますが・・・。


>>    '実際にはここでもErrとTypenameで確認する
>>    Set tcon = cc      ' 3.  
>>
>>    End If
>>  tcon.Visible = False     ' 4. 
>>'使う時はちゃんと型宣言した変数で操作する  ' 5.
>>End Sub
>
私が想定しているのはユーザーフォームへのコントロールの動的な
配置です。

シート上への動的な配置は、色々問題がありますよ!!
Oleobjects.Add(・・・・)
というコードが本当に正常に作動しているのですか?

【42352】Re:再度:メディアプレーヤーについて(ic...
お礼  カッチャン E-MAIL  - 06/9/7(木) 17:22 -

引用なし
パスワード
   ichinose様、これまでご指導ありがとうございます。

 メディアプレヤーはシートに貼付け様と思っていました。(ユーザフォームを利用するとは思いつかなかったのですが)。また、シートに貼り付けるのも、ユーザーフォームに貼り付けるのも同じことだと思っていました。
 でも、ユーザーフォームを使う方が本当は良かったのだと気づき、これからユーザフォームのことを勉強します。これまでのご指導のことを利用してうまく出来ると思います。

 今後またご指導をお願いすることがあると思いますが、その折にはよろしくお願いいたします。これまでのご指導ありがとうございました。

6917 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free