プロが教えるわが家の防犯対策術!

VBAの初心者です
コマンドボタンのクリックでDVDのトレイを開く部分で
フリーソフトのコード:

Dim wmp
Set wmp = CreateObject("WMPlayer.OCX")
wmp.cdromcollection.item(0).eject()

をそのままコマンドボタンプロシージャに張り付けたところ3行目の
wmp.cdromcollection.item(0).eject()のところで「コンパイルエラー・構文エラー」
が出ます。解決法があれば教えてください。

A 回答 (16件中1~10件)

以下では?



Dim wmp
Dim cdromCol
Dim i
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdromCol = wmp.cdromCollection
If cdromCol.Count >= 1 Then
cdromCol.Item(0).Eject
'あるいは
'For i = 0 To cdromCol.Count - 1
'cdromCol.Item(i).Eject
'Next
End If

この回答への補足

ご回答ありがとうございます

(1)
Private Sub CommandButton1_Click()

Dim wmp
Dim cdromCol
Dim i
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdromCol = wmp.cdromCollection
For i = 0 To cdromCol.Count - 1
cdromCol.Item(i).Eject
Next

End Sub

(2)
Private Sub CommandButton1_Click()

Dim wmp
Dim cdromCol
Dim i
Set wmp = CreateObject("WMPlayer.OCX.7")
Set cdromCol = wmp.cdromCollection
If cdromCol.Count >= 1 Then
cdromCol.Item(0).Eject
end if

End Sub

いずれの場合にも
Set wmp = CreateObject("WMPlayer.OCX.7")の行で
「オートメーションエラーです。エラーを特定できません」
というエラーが出ます。

補足日時:2011/07/28 13:41
    • good
    • 0

WMPlayer.OCX.7



としていましたが、バージョンの違いがあるかもしれないので、

WMPlayer.OCX


としてみてください。


それと、最後に

Set wmp = Nothing
End Sub

のように、
Set wmp = Nothing
を付け加えておいてください。

この回答への補足

再回答ありがとうございます

(1)
Private Sub CommandButton1_Click()

Dim wmp
Dim cdromCol
Dim i
Set wmp = CreateObject("WMPlayer.OCX")
Set cdromCol = wmp.cdromCollection
For i = 0 To cdromCol.Count - 1
cdromCol.Item(i).Eject
Next
Set wmp = Nothing
End Sub

(2)
Private Sub CommandButton1_Click()

Dim wmp
Dim cdromCol
Dim i
Set wmp = CreateObject("WMPlayer.OCX")
Set cdromCol = wmp.cdromCollection
If cdromCol.Count >= 1 Then
cdromCol.Item(0).Eject
end if
Set wmp = Nothing
End Sub

としましたが、やはり、いずれの場合にも
Set wmp = CreateObject("WMPlayer.OCX.7")の行で
「オートメーションエラーです。エラーを特定できません」
というエラーが出ます。

補足日時:2011/07/28 19:46
    • good
    • 0

以下のフォルダに、



C:\Program Files\Windows Media Player



wmplayer.exe

があるか、確認してみてください。

この回答への補足

wmplayer.exeはありません。wmplayerはあります。

補足日時:2011/07/28 22:26
    • good
    • 0

もう一つ調べてみてください。

以下のフォルダに、

C:\WINDOWS\system32



wmp.dll

はありますか?



また、Windows Media Player は起動できますか?

この回答への補足

wmp.dllはあります。Windows Media Player は起動できますが、バージョンの調べ方がわかりません。
尚、勝手ながら、次のご回答を見られるのは、明日(29日)午前11時ごろになると思われます。

補足日時:2011/07/28 23:54
    • good
    • 0

Windows Media Playerが起動できるならば、


そのバージョンを調べてみてください。
    • good
    • 0

バージョンは、Windows Media Player のヘルプを


クリックするとバージョンの項があります。それを
クリックして調べてみてください。

この回答への補足

一般的にヘルプでバージョンが分かることは知っていますが、
何故か、WMPにヘルプの項目がありません。尚、使用中の
パソコンは1年半前に買ったVAIOのVPCEB17FJ(新品)という
機種でOSはWindows7です。

補足日時:2011/07/29 11:33
    • good
    • 0

No4のwmp.dllの上で右クリックからバージョン情報を確認


してみてください。

この回答への補足

バージョンは12.0です。

補足日時:2011/07/29 13:52
    • good
    • 0

以前も、Windows Media Playerに関数する質問に


回答したことがあるのですが、そのときのバージョンは
11でした。

国内や、海外のサイトを調べてみたのですが、どうやら
バージョンが9までならば、VBAで

Set wmp = CreateObject("WMPlayer.OCX")

が使えるようです。11の場合はセキュリティの関係で
レジストリを変更する必要があるのかは調べては
いませんが、セキュリティが絡んでいる可能性は
あります。
また、海外では11で
Set wmp = CreateObject("WMPlayer.OCX")
が使えないのはバグではないか、という
意見もありました。

ただ、他の開発言語(たとえば、Delphi)などでは
接続に成功して、DVD、あるいはCDのトレイの操作を
しているようなので言語によっては接続方法が違う
可能性もあります。


したがって、バージョンが12に関しては恐らく
バージョンが11の場合と同じか、あるいは
さらにセキュリティが強化されている可能性が
あります。

VBA以外に、VBSというスクリプトで
Set wmp = CreateObject("WMPlayer.OCX")
という方法でWindows Media Playerに
接続し、トレイの開け閉めをすることが
できるのですが、VBSに関してもバージョンが
9までなら出来るようで、11はオートメーション
エラーが出るようです。多分12に関しても
同じだと思います。

ちなみに、私のパソコンはバージョンが9です。

ただ、バージョンを落とすのはいろいろ考え物で、
最近は、映像ファイルなどにウイルスや悪さを
するスクリプトを仕込んだりすることをする輩
もいるので、Windows Media Playerもかなりの
頻度でバージョンアップやアップデートを
繰り返しているようです。

長い回答の末にこのような回答になり、少し
気が重い感じがします。
    • good
    • 0
この回答へのお礼

初心者の私に懇切丁寧に対応していただき有難うございました。感謝します。

お礼日時:2011/07/29 18:07

少し検索してみました。

代替案になるか、
マイコンピュータでDVDのトレイが(D:)
のようになっていれば、

Sub test4()
Dim objShell

Set objShell = CreateObject("Shell.Application")
objShell.namespace("D:\").Items.Item.InvokeVerb "取り出し(&J)"
End Sub

を実行してみてください。(E:)になっていれば
("D:\")

("E:\")
のようにしてみてください。
    • good
    • 0

もし、使えるようであれば、


コードの最後に、

Set objShell = Nothing
End Sub

のようにして、オブジェクトを開放しておいてください。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!