- 締切済み
VBAでDVDのトレイを開く。、
VBAの初心者です コマンドボタンのクリックでDVDのトレイを開く部分で フリーソフトのコード: Dim wmp Set wmp = CreateObject("WMPlayer.OCX") wmp.cdromcollection.item(0).eject() をそのままコマンドボタンプロシージャに張り付けたところ3行目の wmp.cdromcollection.item(0).eject()のところで「コンパイルエラー・構文エラー」 が出ます。解決法があれば教えてください。
- みんなの回答 (16)
- 専門家の回答
みんなの回答
- piroin654
- ベストアンサー率75% (692/917)
一応確認ですが、右クリックメニューの 「取り出し」をクリックするとDVDトレイ が飛び出しますね? それと、今気がついたのですが、「取り出し」と「開く」は 違うので、DVDディスクを差し込んで中身を画面に表示するのは 「開く」なので、「取り出し」はDVDトレイを外に開く、 すなわち飛び出させることです。
- piroin654
- ベストアンサー率75% (692/917)
やはり、他のパソコンでも確認してみましたが「取り出し(J)」 の場合、 objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(J)" ではなく、 objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(&J)" のようなのですが。もう少しdenka3さんがもっているパソコンと 似たような環境のものを探してみます。
- piroin654
- ベストアンサー率75% (692/917)
取り出し は、ほかに末尾に何か書いてあります? なければ、 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 上記でやってみましたが、やはりだめでした。
- piroin654
- ベストアンサー率75% (692/917)
すみません。のNo12の 開くは間違いです。 右クリックしたときに表示される メニューをすべて教えてもらえますか?
補足
「開く、新しいウィンドウで開く、自動再生を開く、共有、セキュリティ脅威の検索、フォーマット、取り出し、このディスクを消去する、コピー、ショートカットの作成、プロパティ」 以上です。
- piroin654
- ベストアンサー率75% (692/917)
>"取り出し(&J)" を "開く(O)" にして、 Dim objShell Set objShell = CreateObject("Shell.Application") objShell.namespace("D:\").Items.Item.InvokeVerb "開く(O)" Set objShell = Nothing ではどうですか?
- piroin654
- ベストアンサー率75% (692/917)
"取り出し(&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)結論としてトレイは開きませんでした。
- piroin654
- ベストアンサー率75% (692/917)
もし、使えるようであれば、 コードの最後に、 Set objShell = Nothing End Sub のようにして、オブジェクトを開放しておいてください。
- piroin654
- ベストアンサー率75% (692/917)
少し検索してみました。代替案になるか、 マイコンピュータでDVDのトレイが(D:) のようになっていれば、 Sub test4() Dim objShell Set objShell = CreateObject("Shell.Application") objShell.namespace("D:\").Items.Item.InvokeVerb "取り出し(&J)" End Sub を実行してみてください。(E:)になっていれば ("D:\") を ("E:\") のようにしてみてください。
- piroin654
- ベストアンサー率75% (692/917)
以前も、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もかなりの 頻度でバージョンアップやアップデートを 繰り返しているようです。 長い回答の末にこのような回答になり、少し 気が重い感じがします。
お礼
初心者の私に懇切丁寧に対応していただき有難うございました。感謝します。
- piroin654
- ベストアンサー率75% (692/917)
No4のwmp.dllの上で右クリックからバージョン情報を確認 してみてください。
補足
バージョンは12.0です。
- 1
- 2
補足
(1)右クリックメニューの「取り出し」をクリックするとDVDトレイ が確かに飛び出しました。 (2) 念のため、"取り出す(&J)"で再度試みましたが駄目でした。