~Current無省略オブジェクト式記述~※まだ書きかけです。※間違ってたらすみません。※メモ書きなので、自分でも意味不明な箇所も多いです。目次(01)すべての上位のオブジェクト名を一覧表示(「Obchk03Type」という自作関数)(02)すべての上位のオブジェクトの名前を一覧表示(「Obchk04Name」という自作関数)※Nameプロパティを持つオブジェクトだけ(03)すべての上位のオブジェクトのインデックス番号を一覧表示(「Obchk05Index」という自作関数)※Indexプロパティを持つオブジェクトだけ(04)色の数値を「赤・緑・青」の数値に変換する(「GetIntByRGB」という自作関数)※Shift+TABキー、もしくは、Homeキー、Homeキー+TAB数回、を押すと、目次付近に戻れます。イミディエイトウィンドウで使う自作関数(ちょっとした省力化)関数というか、イミディエイトウィンドウなどから呼び出して使う、戻り値が無かったり有ったりのプログラムたちです。僕(ド素人)が作ったやつなのでショボいですが、それなりに使えます。Excel初心者の方向けです。(01)すべての上位のオブジェクト名を一覧表示(「Obchk03Type」という自作関数)シート上で選択したオブジェクトの、「すべての上位オブジェクトの(親・ばあちゃん・ひいばあちゃん、ひいひいばあちゃん・・・の)オブジェクト名」がリストアップ表示されます。Obchk03Typeとコピペして、Enterします。これを好きな標準モジュールにコピペすれば使えます。Obchk03Type」と書いてEnterすると、以下のように表示されます。・「セル」というものは「Range」という種類の「オブジェクト」になりますよ~!・そしてその上位には、「Application、Workbook、Worksheet」というオブジェクトがありますよ~!・で、階層構造としては、以下のようになってますよ~、Application|_Workbook|_Worksheet|_Range・階層構造の最上位は「Application」(=Excelのアプリケーションウィンドウ=親ウィンドウ)ですよ~!・・・という意味になります。(「Application」が複数出てきたら、2つめよりも上のものは無視します。ローカルウィンドウを表示させると、そのオブジェクトの現在のプロパティ値を全部調べることができます。ローカルウィンドウの中に「ObjTest06」という項目があると思います。それがシート画面上で選択したオブジェクトです。その項目の「+」マークをクリックすると、そのオブジェクトが持つすべてプロパティが表示されます。「型」がデータ型です。「Parent」という項目を探して「+」マークを展開して、段階的に「Parent」という項目ばっかりで探っていくと、親・ばあちゃん・ひいばあちゃん・・・、と上位のオブジェクトのプロパティ内容も全部わかります。下位のオブジェクト(子、孫、)は、「Parent」以外の「+」マークの付いているものが全部それです。下位のオブジェクトも段階的にどんどん下へもぐれますので、何階層か下のオブジェクトのプロパティ値も知ることができます。目的を達したら、F5キーを押せば、最後まで実行して何もしてない状態に戻ります。※補足説明(超重要!!!)厳密な階層構造としては、Application|_Workbook|_Worksheet|_Rangeではなくて、Application|_Workbooksコレクションオブジェクト|_Workbook|_Worksheetsコレクションオブジェクト|_Worksheet|_Range・・・という風に、「コレクション(複数の同種・あるいは似た種類のオブジェクトたちを束ねて一括管理する機能を持つオブジェクト)」がそれぞれ所定の場所に存在する階層構造であると思います。オブジェクト式を書くときは、その「コレクションの階層」は出てこないので実際に書くことが無いですし、また、コレクション名自体も出てこないので、オブジェクト式を書く場合に限っては、便宜上、各コレクションオブジェクトの名前(階層)が省略された下図の階層構造図を使います。Application|_Workbook|_Worksheet|_Range本自作関数(「Obchk03Type」)を使っただけではコレクションの位置づけがわかりませんが、「オブジェクト式を書くときだけ」、コレクションは単一オブジェクトと同じ階層だとみなして理解・記述します。(下図のようなイメージです。Excel2000のヘルプのオブジェクトモデルの階層構造図も同じような形になっています。←←※この図はよく使われるコレクションとオブジェクトしか載ってないらしく、描かれてないものもあります。SheetsコレクションとかRangesコレクション。現実に実際にオブジェクト式を書くときに、Application.Workbooks.Workbooks(1).Worksheets.Worksheets(1).Ranges.Range("A1")と書くのではなく、Application.Workbooks(1).Worksheets(1).Range("A1")と書くことからも、イメージできるのではないかと思います。僕なんて特にそうなんですけど、どんなところ(どんな思い込みや決めつけ、勘違い、無知)に原因が潜んでいるかわかりませんので・・・。※さらに補足(これも超重要!!!):プロパティ経由のオブジェクト取得とコレクション経由のオブジェクト取得(というか、同名のコレクションオブジェクト)を混同しないように。このこのことが超重要かというと、そのことを知らないとExcelのヘルプが読めないからです。Excelの場合、オブジェクト式に出てくる「いかにもコレクションっぽい名前」は、実はコレクション名ではなく、コレクション名と同名のプロパティの名前です(たとえばWorksheetsコレクションとWorksheetsプロパティ)。プロパティを使用します。』とはっきりと書いてあります。オブジェクトを取得するのに、「Worksheetsコレクションを使え」とは一切書いてありません。Excelでは、コレクションを直接使ってオブジェクトの取得をしているわけではないのです。(「コレクションの中から単一のオブジェクトを選び出す作業がなされている」というのは間違いないんですけど、それをコレクション自身が率先して・起点となってやっているわけではなくて、同じ名前のプロパティから頼まれてやってる・・・というイメージです。プロパティを入り口として、裏方で目立たずにWorksheetsコレクション(本当はSheetsコレクションだけど)を覗きに行き、そこからWorksheetオブジェクトを1個、取得している・・・というイメージなのかもしれません。プロパティという「機能」が、「おーい!Worksheetsコレクションさーん!今から言うシートを1個、取り出してね~!」という感じでWorksheetsコレクションという「機能」に司令を伝達しているのかもしれません。私らド素人は謎の部分はそんな風に勝手にイメージしてもいいと思います。「プロパティという機能が、自身でプロパティ設定をしつつ、同時にオブジェクトを連鎖取得もしている・・・」というばくっとしたイメージです。単一のオブジェクトを取得するケース」というのは、例えば「コントロール」と呼ばれるオブジェクト(ユーザーフォーム上やシート上に作ったコマンドボタンやリストボックスなどの部品)を取得する場合がそうだと思います。ExcelではなくAccessの場合はほとんどがコレクション経由です。プロパティ経由でオブジェクトを取得するケースは基本、ほとんど無いような気がします(って僕が知らないだけかもしれませんが・・・)。言うとCOMオートメーションでExcelの機能を使う(=ExcelVBAをAccessVBAの中に書く)時くらいではないかと思います。Wordの場合は、多分Excelと似て、プロパティ経由でのオブジェクト取得が多いと思います。修正:この記事の「コレクション経由のオブジェクト取得ができる」という記述はすべて間違いでした。申し訳ございませんでした。本日別件でたまたまAccessのオブジェクトブラウザを見てみたら、すべて間違いとわかりました。「大切な基礎の部分」で大ウソを流布してしまい、本当に申し訳ございませんでした。穴があったり入りたいです。「オブジェクト式」におけるAccessの「Forms」(つまり「Application.Forms」の「Forms」)は、「コレクション名」ではなくExcelの場合と同様、「プロパティ名」でした。Accessのオブジェクトブラウザで確認できます。Accessのオブジェクトブラウザで、Applicationを検索してオブジェクトのメンバを見ると、中に「Forms」というものがあり、すると、そのアイコンは「プロパティ」を表すアイコンです。Forms」と書いてあります。いうコレクションオブジェクトを返します。」という意味ですから、結果、「Application.Forms」の「Forms」は、コレクションではなくプロパティでした。よってAccessでよく書く「Forms("フォーム1")」とか「Forms(1)」などの「Forms」は「コレクション名」ではなく「プロパティ名の「Forms」であった、ということです。プロパティを使います」と明示的に書いてないので誤解してしまいました。今後は、オブジェクトブラウザから先に見るようにします。ExcelやWordなどの「ユーザーフォーム」の各コントロール(テキストボックスやコマンドボタンなど)の場合も、これに同じです。あと、なぜコレクションとプロパティの名前が同名になっているケースが多いのかはわかりませんが、そのほうが見た目的にわかりやすいからという単純な理由からかもしれません。真偽はマイクロソフトさんに聞いてください。(02)すべての上位のオブジェクトの名前を一覧表示(「Obchk04Name」という自作関数)※Nameプロパティを持つオブジェクトだけ多くのオブジェクトは、「Nameプロパティ」を保持していて、その設定値を調べられる仕組みになっています。「Nameプロパティの設定値」とは、例えばユーザーがシートのタブで付けた名前とか、他方、ユーザーフォームや埋込グラフ、ピボットテーブル等々のように、Excelが自動的に各オブジェクトに付けてくれる名前とかです。その「Nameプロパティ」の値は、オブジェクトの取得をするとき・・・つまり、「オブジェクト式」や「部分オブジェクト式」を書くとき・・・・によく使われます。ここではその「Nameプロパティ」の値を、階層構造順にリストアップする関数をご紹介します。こでもド素人が作ったのでショボいです。こちらもStopでローカルウィンドウを使って、上位や下位のオブジェクトのプロパティを調べられる形にしてあります。(用が済んだらF5キーで終了してください)なお、注意事項ですが、「Nameプロパティ」を保持していないオブジェクトもあるので、そういうものは空白行になるようになっています。Obchk04Nameと書いてEnterして使ってください。ExcelBook11.xlsSheet1===============================のように出ます。空白行はNameを持ってないオブジェクトです。Function''(03)すべての上位のオブジェクトのインデックス番号を一覧表示(「Obchk05Index」という自作関数)※Indexプロパティを持つオブジェクトだけ「オブジェクト式」や「部分オブジェクト式」を書くときに、「Nameプロパティ」が使えずに、「Indexプロパティ(インデックス番号)」しか使えないオブジェクトがあります。これはそういうオブジェクトのインデックス番号番号を階層構造込みで、調べるものです。「Indexプロパティ」を保持していないオブジェクトはとても多いので、かなりの行が空白行になります。Obchk05Index」と書いてEnterすると、以下のように空白がたくさん表示されます。数字が出れば何かの役に立つことも少なくないので、それはそれでありがたく使わせてもらいます。挫折するオブジェクト式やプログラム(プロシージャ)の書き方、挫折しない書き方、の違い。送信メールが受信トレイに入ってしまうトラブルの回避、など。ODBCでQueryTableオブジェクトを自動作成するサンプルコード)。2000以降の全バージョンで使えると思います。~ついでに、セルの値で結果表示を自動で切り替える「パラメータクエリ」のVBAでの自動作成も。~★★Access2000VBA・Excel2000VBA独学~Win32API。eChromeを例に。(Excel、Word、Access、などが32bit版のモノでしか使えませんが、OSは64bitでも大丈夫です。Access2000VBA・Excel2000VBA独学~今選択しているオブジェクトの、『階層構造を省略しないオブジェクト式』の書き方・目次とサマリーもどきAccess2000VBA・Excel2000VBA独学~XPやWin2000、あるいはその仮想マシンの中で、Office2000~2003でADOやDAOのヘルプをきちんと表示する方法と、2000系のヘルプと2007系の「”VBE”ヘルプ」の違い・それぞれの良さ。「安全」な、Youtube動画のダウンロード方法6つ。挫折するオブジェクト式やプログラム(プロシージャ)の書き方、挫折しない書き方、の違い。送信メールが受信トレイに入ってしまうトラブルの回避、など。ODBCでQueryTableオブジェクトを自動作成するサンプルコード)。2000以降の全バージョンで使えると思います。~ついでに、セルの値で結果表示を自動で切り替える「パラメータクエリ」のVBAでの自動作成も。technology.。