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

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

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

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

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

一応確認ですが、右クリックメニューの


「取り出し」をクリックするとDVDトレイ
が飛び出しますね?

それと、今気がついたのですが、「取り出し」と「開く」は
違うので、DVDディスクを差し込んで中身を画面に表示するのは
「開く」なので、「取り出し」はDVDトレイを外に開く、
すなわち飛び出させることです。

この回答への補足

(1)右クリックメニューの「取り出し」をクリックするとDVDトレイ
   が確かに飛び出しました。
(2) 念のため、"取り出す(&J)"で再度試みましたが駄目でした。

補足日時:2011/07/29 23:38
    • good
    • 0

やはり、他のパソコンでも確認してみましたが「取り出し(J)」


の場合、

objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(J)"

ではなく、

objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(&J)"

のようなのですが。もう少しdenka3さんがもっているパソコンと
似たような環境のものを探してみます。
    • good
    • 0

取り出し



は、ほかに末尾に何か書いてあります?

なければ、

Dim objShell

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



あれば、

"開く(O)"

のように末尾にあるものをくっつけてください。
くっつけなくても動作するかもしれません

この回答への補足

Private Sub CommandButton1_Click()

Dim objShell

Set objShell = CreateObject("Shell.Application")
objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(J)"
Set objShell = Nothing

End Sub

上記でやってみましたが、やはりだめでした。

補足日時:2011/07/29 22:40
    • good
    • 0

すみません。

のNo12の
開くは間違いです。

右クリックしたときに表示される
メニューをすべて教えてもらえますか?

この回答への補足

「開く、新しいウィンドウで開く、自動再生を開く、共有、セキュリティ脅威の検索、フォーマット、取り出し、このディスクを消去する、コピー、ショートカットの作成、プロパティ」

以上です。

補足日時:2011/07/29 21:47
    • good
    • 0

>"取り出し(&J)"





"開く(O)"

にして、


Dim objShell

Set objShell = CreateObject("Shell.Application")
objShell.namespace("D:\").Items.Item.InvokeVerb "開く(O)"
Set objShell = Nothing


ではどうですか?
    • good
    • 0

"取り出し(&J)"



というのは、マイコンピュータのDVDの上で
右クリックしてときに表示されるメニューの
中の一つの項目です。たぶんこのような
項目があるはずです。この項目をプログラムから
実行してください、というのが


Sub test4()
Dim objShell

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

の意味です。Shell.Applicationについては調べてみてください。
一応、こちらでは動作しています。

この回答への補足

Private Sub CommandButton1_Click()

Dim objShell
Set objShell = CreateObject("Shell.Application")
objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(&J)"
Set objShell = Nothing

End Sub

(1)上記のようにコマンドボタンのプロシージャの中に張り付けましたが、
 それで良いでしょうか?
(2)DVD上で右クリックすると、「開く(O)」~「プロパティ」までの一般
  的な別ウィンドウ(?)が現れ、"取り出し(&J)" という類の表示は出ま
  せん。
(3)結論としてトレイは開きませんでした。

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

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


コードの最後に、

Set objShell = Nothing
End Sub

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

少し検索してみました。

代替案になるか、
マイコンピュータで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

以前も、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

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


してみてください。

この回答への補足

バージョンは12.0です。

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

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