素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。2018-04-30プリンタ名を調べるVBA覚書プリンタ名を取得するakashi-keirin.hatenablog.comコチラをうpしたところ、Twitterで次のサイト(『パソコンの小技・備忘録(ExcelのVBAで、パソコンのプリンタ一覧を取得したい。)』)をご紹介いただいた。プリンタ名を比較するときにApplication.ActivePrinterの返り値をそのまま使うことができないのだ。そんなわけで、仕方なく純粋なプリンタ名だけをまず切り出して、比較しているのだ。ところを見て、教えてくださったのだろう。Nothingこんなの。いえば、「Shell」とか、今ひとつよく分かっていなかったので、この機会にちょっと調べてみた。CreateObject("Shell.Application")では、Shell.Applicationというクラスのインスタンスを生成して変数tempShellにぶち込んでいる。objects.とあるので、「Shell」というものの中にあるオブジェクトを操れるようにするオブジェクトぐらいの意味なのだろう(適当)。Eachを用いて、[Shellオブジェクト].NameSpace(4).Itemsコレクションの要素を1つ1つ取り出す処理であることが読み取れる。結局、tempObjという変数には何が入ることになるのか、ちょっと面倒だけれど、せっかくなので丁寧にたどってみる。ShellオブジェクトのNameSpaceメソッド。folder.とある。特殊フォルダの「Folder」オブジェクトを生成したり取得したりするメソッドっぽい(適当)。ちなみに、上掲コードではtempShell.NameSpace(4)と、NameSpaceメソッドの引数に「4」を渡している。objShell.NameSpace(ssfPERSONAL)と、引数のところに「ssf」で始まる定数が使われている。これは、「ShellSpecialFolderConstants」という組み込み列挙体らしい。Automation」にチェックを入れて、オブジェクト・ブラウザーを見ると、こんなふうに表示される。「4」というのは、「ssfPRINTERS」のことだと分かる。printers.ということらしい。folder」というのがよく分からんが、インストールされたプリンタを管理しているフォルダなんだろう(適当)。tempShell.NameSpace(4)という式で、めでたくFolderオブジェクトが取得できるので、今度は、tempShell.NameSpace(4).ItemsでFolderオブジェクトのItemsメソッドを使う。folder.とある。FolderItemsオブジェクトというのを返すみたい(適当)。Eachで取り出されるのはFolderItemオブジェクトということになる。object」の項を見れば、メンバが分かる。Nameプロパティもある。Thenという条件分岐がイマイチ意味がよく分からないが、全体としてプリンタ情報を管理している特殊フォルダの中身を一つ一つチェックして、Nameプロパティをセルに書き出すというコードになっていることが分かる。上掲サンプルコードにテキトーなプロシージャ名を付けて実行すると、このとおり。純粋なプリンタ名が取得できている。これをakashi-keirin.hatenablog.comこのときの軽量PDF出力メソッドにどう生かすか、となると、ちょっとめんどくさそう。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。