VBAでプリンタ名の一覧を取得する方法は?

このQ&Aのポイント
  • VBAのコードを使用して、パソコンにインストールされているプリンタ名の一覧を取得したいです。
  • コンパイルエラーが発生しているため、変数のデータ型を宣言する必要があります。
  • 適切なデータ型としては、WinおよびObj_ItemにはObject型を使用すれば問題ありません。
回答を見る
  • ベストアンサー

どのデータ型で宣言すればいいのでしょうか?

VBAです。 http://okwave.jp/qa/q1318017.html を参考に、現在パソコンに入ってるプリンタ名の一覧を取得したいのですが ***************************************** Sub アクティブプリンターを取得する() Set Win = CreateObject("Shell.Application") For Each Obj_Item In Win.Namespace(4).Items Debug.Print Obj_Item.Name Next End Sub ***************************************** を実行すると、 「Win」と「Obj_Item」が 「変数が定義されていません。」というコンパイルエラーになってします。 なので、 ***************************************** Dim Win, Obj_Item As データ型 ***************************************** で、変数を宣言すればいいと思うのですが、どのデータ型で宣言すればいいのでしょうか? ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

As Object でいいと思いますが、アーリーバインディングでするなら、 「Microsoft Shell Controls And Automation」を参照設定で設定して Dim s As New Shell Dim i As Shell32.FolderItem For Each i In s.NameSpace(4).Items Debug.Print i.Name Next のようにしてやればよいでしょう。

bvbnmnbv
質問者

お礼

Dim Win, Obj_Item As Objectで、 変数を宣言したら 「Microsoft Shell Controls And Automation」を参照設定しなくてもできました! 環境はOS:win7、office2007だからですかね? 有難うございました。

関連するQ&A

  • フォルダ選択と取得したパスの表示

    どうしてもわからないのでご教授お願いします。 コマンドボタンを使用して、フォルダの選択のダイアログを表示し、選択したフォルダのパスを取得することはできたのですが、そこから取得したパスを任意のセルに表示させたいです。 どうすれば表示させることができるでしょうか。 Private Sub commandbutton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "C:\") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub ご教授宜しくお願いします。

  • Object型じゃない型で宣言したいです。

    Function MyDesktop() Dim WSH Set WSH = CreateObject("Wscript.Shell") MyDesktop = WSH.SpecialFolders("Desktop") Set WSH = Nothing End Function このコードの Dim WSH に、ちゃんと変数の宣言をしてあげたいのですが 何で変数の宣言をして、どこに参照設定をすればいいのでしょうか? Object型じゃない型で宣言したいです。

  • エクセルVBAで指定フォルダ内の選択ファイル名の取得

    お世話になります。 エクセルVBA昨日から始めた初心者です。 いま、 Private Sub CommandButton1_Click() Dim Shell, myPath Set Shell = CreateObject("Shell.Application") Set myPath = Shell.BrowseForFolder(&O0, "フォルダを選んでください", &H1 + &H10, "\\hk001a24\va\data\ツール") If Not myPath Is Nothing Then MsgBox myPath.Items.Item.Path Set Shell = Nothing Set myPath = Nothing End Sub というの作成したのですが、 これだとフォルダの選択しか出来ませんでした。 \\hk001a24\va\data\ツールの下にあるファイルを選択出来て、その選択したファイル名をVBA取得して保持できる ようにしたいのですが・・・ 急いでいるのでここで質問させて頂きました。 よろしくお願いします。

  • LocationNameを取得するとアウトルックが

    エクセルvba2010です。よろしくお願いします。 Sub Sample() Dim ie As Object For Each ie In CreateObject("Shell.Application").Windows() Debug.Print ie.LocationName Next End Sub このコードで、現在開いているURL名を取得すると、 アウトルックを立ち上げてると outlook:%26%2321463・・・ と言うのが取得されるのですが、これは何のパスでしょうか? メールは立ち上げていません。

  • Namespaceの引数について

    VBA超初心者です。  指定したフォルダーの中のファイルの詳細をエクセルに落とすマクロを作成しているのですが、ファイルダイアログで指定したパスがNamespaceの引数にうまく渡せません。たぶん型が違うか何かだと思うのですが、ご存知の方ご教授願えれば幸いです。   Set SHell = CreateObject("Shell.Application") Set Folder = SHell.Namespace("C:\Users\")                    ↓ Set Folder = SHell.Namespace(Target_Dir)  直接pathを書き込むと問題なく動作するのですが、変数で引き渡すとエラーになります。型が違う?初心者でもわかるように解説していただけると助かります。

  • プリンタ マクロ Ne○○

    エクセルマクロで「プリンター名 on Ne○○」○○の数字をマクロで調べることは可能でしょうか。 他のサイトで調べてみました。 Sub Saaample() Dim tempShell As Object Dim tempObj As Object Dim intRow As Integer Set tempShell = CreateObject("Shell.Application") intRow = 1 For Each tempObj In tempShell.Namespace(4).Items If intRow > 1 Then Cells(intRow, 1) = tempObj.Name End If intRow = intRow + 1 Next Set tempShell = Nothing End Sub で実行するとプリンター名は取得できるのですが「Ne○○」まではできませんでした。 プリンターの増減で「Ne○○」が変わってしまうのでその都度修正するのですが 調べ方がわからず上か下の数字に変更して対処してます。                    宜しくお願いいたします。

  • VisualBasic2008とMS-Access

    はじめまして。ご存じの方いらしたらご教授下さい。 VisualBasic2008 ExpressEditionからAccess2000(mdb)を起動する方法が分かりません。 Excelの場合は、 Dim obj as object obj = CreateObject("Excel.Application") Shell(obj.path & "\excel.exe " & "hoge.xls", 1) で起動できましたが、Accessを起動しようと同様に Dim obj as object obj = CreateObject("Access.Application.9") Shell(obj.path & "\msaccess.exe " & "hoge.mdb", 1) としたところ「公開メンバ 'path' は型 'Application' に見つかりませんでした。」 とShell命令で中断します。 宜しくお願い致します。

  • perlでdialogのフォルダ指定

    perl勉強中のものです。 perlにてプログラムを作成中ですが、フォルダを ダイアログを使って指定したいです。 参考ページを調べvbsにて以下のプログラムを作ってみました。 ****************************************************************** Set Shell = CreateObject("Shell.Application") Set objFolder = Shell.BrowseForFolder(0, "フォルダを選択してね!", 1, "c:\\") if objFolder is Nothing then Msgbox("ちゃんと選んで頂戴!") else Msgbox(objFolder.Items.Item.Path) end if ****************************************************************** 理解しきれていないのですが、vbsをperlに埋め込む?(変換?)ことができるようで モジュールを使って、上記のプログラムから参考を調べ、見よう見まねでperlで 作ってみましたが、何も表示せず、動作しません。 どこに問題があるか教えていただけないでしょうか? ****************************************************************** use Win32::OLE; my $Shell = Win32::OLE->CreateObject("WScript.Shell"); my $objFolder = $Shell->BrowseForFolder(0,'フォルダを選択してね', 1, 'c:\\' ); unless ($objFolder) { $Shell->MsgBox('ちゃんと選んで頂戴!',undef,'フォルダ選択',1); } else { $Shell->MsgBox("$objFolder->$Items->$Item->$Path"); } ******************************************************************* とんちんかんなプログラムを作っているかもしれませんが、 ご指導よろしくお願いします。

    • ベストアンサー
    • Perl
  • Variant型で宣言してるのにEmptyになる

    エクセルVBA2003について質問です。 Sub aaa1() Dim a As Variant Debug.Print TypeName(a) End Sub を実行してイミディエイトウインドウで確認すると Emptyが返ってきます。 Variantが返ってこない理由は何でしょうか? また、変数の方の宣言をしない場合は Variant型になるはずなのに Sub aaa2() Dim a Debug.Print TypeName(a) End Sub を実行すると、同じくEmptyが返ってきます。 Variantが返らない理由を教えてください。よろしくお願いします。

  • 何が間違ってるのか教えていただけませんか?

    VBAエクセルです。 *********************************************** Sub OSのDefaultPrinterを取得() Dim プリンタ As Object Set プリンタ = CreateObject("WScript.Network") Debug.Print プリンタ.SetDefaultPrinter End Sub *********************************************** を実行すると、 (Debug.Print プリンタ.SetDefaultPrinter)の部分で、 引数の数が一致していません。または不正なプロパティを指定しています。(Error 450) となってしまいます。 どう修正すれば、現在のデフォルトのプリンター名を取得できるのでしょうか? ちなみに Sub tset() Debug.Print ActivePrinter End Sub で取得出来る事は知っています。 ご回答よろしくお願いします。