• 締切済み
  • すぐに回答を!

VBAでDVDのトレイを開く。、

VBAの初心者です コマンドボタンのクリックでDVDのトレイを開く部分で フリーソフトのコード: Dim wmp Set wmp = CreateObject("WMPlayer.OCX") wmp.cdromcollection.item(0).eject() をそのままコマンドボタンプロシージャに張り付けたところ3行目の wmp.cdromcollection.item(0).eject()のところで「コンパイルエラー・構文エラー」 が出ます。解決法があれば教えてください。

共感・応援の気持ちを伝えよう!

みんなの回答

  • 回答No.16

一応確認ですが、右クリックメニューの 「取り出し」をクリックするとDVDトレイ が飛び出しますね? それと、今気がついたのですが、「取り出し」と「開く」は 違うので、DVDディスクを差し込んで中身を画面に表示するのは 「開く」なので、「取り出し」はDVDトレイを外に開く、 すなわち飛び出させることです。

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

  • 回答No.15

やはり、他のパソコンでも確認してみましたが「取り出し(J)」 の場合、 objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(J)" ではなく、 objShell.Namespace("E:\").Items.Item.InvokeVerb "取り出し(&J)" のようなのですが。もう少しdenka3さんがもっているパソコンと 似たような環境のものを探してみます。

共感・感謝の気持ちを伝えよう!

  • 回答No.14

取り出し は、ほかに末尾に何か書いてあります? なければ、 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 上記でやってみましたが、やはりだめでした。

  • 回答No.13

すみません。のNo12の 開くは間違いです。 右クリックしたときに表示される メニューをすべて教えてもらえますか?

共感・感謝の気持ちを伝えよう!

質問者からの補足

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

  • 回答No.12

>"取り出し(&J)" を "開く(O)" にして、 Dim objShell Set objShell = CreateObject("Shell.Application") objShell.namespace("D:\").Items.Item.InvokeVerb "開く(O)" Set objShell = Nothing ではどうですか?

共感・感謝の気持ちを伝えよう!

  • 回答No.11

"取り出し(&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)結論としてトレイは開きませんでした。

  • 回答No.10

もし、使えるようであれば、 コードの最後に、 Set objShell = Nothing End Sub のようにして、オブジェクトを開放しておいてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.9

少し検索してみました。代替案になるか、 マイコンピュータでDVDのトレイが(D:) のようになっていれば、 Sub test4() Dim objShell Set objShell = CreateObject("Shell.Application") objShell.namespace("D:\").Items.Item.InvokeVerb "取り出し(&J)" End Sub を実行してみてください。(E:)になっていれば ("D:\") を ("E:\") のようにしてみてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.8

以前も、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もかなりの 頻度でバージョンアップやアップデートを 繰り返しているようです。 長い回答の末にこのような回答になり、少し 気が重い感じがします。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.7

No4のwmp.dllの上で右クリックからバージョン情報を確認 してみてください。

共感・感謝の気持ちを伝えよう!

質問者からの補足

バージョンは12.0です。

関連するQ&A

  • DVDトレイを開ける

    VBA初心者です。エクセルのシート上にコマンドボタンを張り付け、ボタンのクリックでDVDトレイを開くようにしたいのですが、手順を教えてください。丸投げの質問で申し訳ありません。

  • ACCESS VBAで別のプロシージャを呼びだした後

    いつもお世話になります。 ACCESS VBAで、別のプロシージャを呼びだし、 フォームを開き、あるコマンドボタンをクリックすると、 もとに戻ってくるようにしたいのですが、 call で別のプロシージャを呼びだし、フォームを開くところまではうまくいくのですが、コマンドボタンをクリックする前に戻ってきてしまいます。 コマンドボタンにはイベントプロシージャを設定しているのですが、 それではダメなんですよね? どのようなコードになるのでしょうか?よろしくお願いします。

  • VBA コンパイル

    エクセルVBA初心者です。 コードを記述している際に、”迷惑な”コンパイルエラーが出てきます。 例えば dim i i= 記述中に、他をマウスクリックすると、コンパイルエラーになります。 エラーなのは重々理解していますが、実行時にエラーかどうか判定して欲しいです。 オプションで、順次コンパイルOFFなどして試行錯誤しましたが、不可能でした。 仕様なのでしょうか? エクセル2007

  • Access VBAで

    VBAの超初心者です。 Accessのフォームでコマンドボタンを押すと、決まった文字が入力できるフォームを作りたいと思っています。 クリック時のイベントプロシージャーはどのように記入すればよいのでしょうか。 ど素人な質問ですみません。

  • VBAの正しい構文なのでしょうか?。

    VBAの正しい構文なのでしょうか?。 以下の構文は正しいのでしょうか?。 Option Explicit Dim stdocname As String Dim repo As Report      :      :      : Private Sub 印刷_Click() On Error GoTo Err_印刷_Click      : Set repo = Reports(stdocname)

  • VBAの関数を網羅的に知りたい。

    例えば以下の Dim objIE objIE = CreateObject("InternetExplorer.application") のような記述をすればIEを立ち上げることができると思うのですが、 これらの関数やコマンドは先駆者の方々はどこから知ることができたのでしょうか? VBA辞典みたいな本を購入してもこういう指示が記載されていなかったりします。 こういったコマンドや記述の仕方を網羅的にのせているサイトなどは存在するのでしょうか? ご回答のほどよろしくお願いいたします。

  • VBAの初期化について

    VBAの初期化について 変数Xに100という値を初期値として代入したいのですが。 Option Explicit Dim X As Integer X =100 と書くとコンパイルエラーになります。 C言語では int X=100 と初期化できますが、 VBAではどのようにすればいいのでしょうか?

  • Access2000のVBAでコンパイルエラー

    Access2000のVBAで初歩的な質問があります。 「tblShi」というテーブルがあります。 フォームにボタン「btn1」を作り、 デザインビューでボタンのプロパティを開いて イベントのクリック時のところで、 「ビルダの選択」をコードビルダにしました。 そして「Private Sub btn1_Click()」の中に、最初に   Dim db As Database という記述をしています。 このフォームを開いてボタンを押すと、なぜか   コンパイルエラー   ユーザ定義型は定義されていません というエラーが表示されてしまいます。 たしかにコードを書いているときに、   Dim db As のところまで入れると、小さいウィンドウの中に たくさん候補が表されますが、 その中に「Database」というのがないです。 「QueryDef」とか「Workspace」とかもありませんでした。 (「Recordset」はありまして、それはコンパイルが通ります) いろいろな解説を見ても、やはり最初はどれも 「Database」型を宣言しているようなんですが… 何がよくないのでしょうか。 もしわかる方がいらっしゃったら教えてください。

  • Excel VBA

    Excel2007のVBAの初心者です。 列のなかにある黄色のセルの個数をカウントしたいと思い、いろいろ探しているとVBAにおいて以下のようなコードを発見しました。  Dim c As Range,cu As Long  Application.Volatile  For Each c In a  If c.Interior.ColorIndex = 6 Then cu = cu +1  Next  color6 = cu  End Function しかし、いざやってみると 「コンパイルエラー プロシージャの外では無効です」 と表示され、うまくいきません。コードが違うのかどうかも分からないし、この警告文の意味もわかりません。 どなたか詳しい方。よろしくお願いします。

  • windows7上でVBAマクロがエラー

     仕事で使っているエクセル97で作ったVBAマクロがありますが、winXPからwin7に乗り換えたらエラーがでるようになりました。  コマンドボタン押下によるマクロで、変数フラグに「xxxx=1」という記述でコンパイルエラーが起こり、実行がストップします。  自動処理だけを目的に作っており、定石を踏んだマクロになっておらず、このxxxxにもディメンションで変数型を指定しておらず(こちらにおられる諸兄には怒られそうですが)、 Private Sub CommandButton1_Click() Application.ScreenUpdating = False xxxx = 1   :  というソースの中で、開始直後にxxxx=1にフォーカスがあたり、コンパイルエラーになります。  winXPまでは問題なく動作していたマクロです。(Vistaでは試すチャンスがありませんでした)  解決方法はあるのでしょうか。それとも変数にDim定義を追加する修正をソースへいれないとだめでしょうか。  ご存知の方、ご指導ください。