素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。VBA自作メソッドテキストボックス内のハイライト部分をそれぞれ配列に格納して、Collectionにする意味の取りづらいタイトルですまない。テキストボックス内のハイライト部分(Rangeオブジェクト)をテキストボックスごとに配列にして、それぞれの配列をCollectionにぶち込もう、ということ。余計にわからなくなったとしたら申しわけない。ハイライト部分を保持するクラスなぜかクラスモジュールを使う。クラス名は「HighLightedRange」にした。相変わらずクラスの命名のこつがわからない。作成済みのクラスモジュールのコードを全て載っけると異様に長くなるので、必要な部分のみ掲載する。Subコード中のresetFindObjectメソッドについては、akashi-keirin.hatenablog.comコチラをご覧ください。getHighLightedRangesInTextBoxメソッドが、テキストボックスのハイライト部分を配列化→配列のコレクション化を行う。処理の内容については、コード中にかなり細かくコメントを入れたので、そちらをよく読んでくだされ。簡単に説明すると、akashi-keirin.hatenablog.comコチラでご紹介したやり方でもって、テキストボックスの文字列の先頭にカーソルを置いて、あとはakashi-keirin.hatenablog.comコチラでご紹介したやり方でハイライト部分(Rangeオブジェクト)を配列にぶち込んでいっている。このときと違うのは、さらにその配列をCollectionにぶち込んでいる、というだけ。使ってみるこのように、テキストボックスを二つ設置したDocumentを用意して、次のコードを実行してみる。Subもちろん、単にこのコードを実行しただけだと、表面上何も起こらない。配列を作ってCollectionにぶち込んでいるだけだし、そのCollectionにしたところで、実行後は破棄されてしまうのだから。Subのところにブレークポイントを設定してコードの実行を中断し、イミディエイト・ウインドウに次のように打ち込んで[Enter]し、変数の内容を調べてみる。?highLightedRange_.HighLightedRangesInTextBox(1)(0).Text?highLightedRange_.HighLightedRangesInTextBox(1)(1).Text?highLightedRange_.HighLightedRangesInTextBox(1)(2).Text?highLightedRange_.HighLightedRangesInTextBox(1)(3).Text?highLightedRange_.HighLightedRangesInTextBox(2)(0).Text?highLightedRange_.HighLightedRangesInTextBox(2)(1).Text鋭い方なら三つ目と四つ目に「?」となるだろうが、実行結果を見てほしい。実行結果なぜか、このような結果になる。一つ目のテキストボックスは、ハイライト箇所が2箇所しかないのに、その2箇所が二重に取得されてしまっている。二つ目のテキストボックスはちゃんと取得されているのに。なるのか、全然わかりません。おわりに実は、今回のHighLightedRangeクラスに、次のメソッドを追加して、上記getHighLightedRangesInTextBoxメソッド実行後に実行すると、おかしなことが起こる。32Bit)ではWordが強制終了されてしまうのである。Wordが自動的に再起動した後、標準モジュールやクラスモジュールの復元に失敗したらしく、間違えて上書き保存してしまってせっかく書いたコードが一度失われるという悲劇に......。ホントにわけわかんないんですけど......。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。