スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
拍手する
↑ポチして頂けると、とても励みになります

ワークシート上のコントロールの一覧を取得して操作する

お酒はほどほどにしなければ・・おいしいんですけどね!
頭痛さえなければ。。
うぅ・・

今回はExcelのVBAでワークシート上に設置したコントロールを列挙して操作する方法の私的メモです。
フォームコントロールをコンテナとして使用し、Controlsコレクションから列挙する方法はあるのですが、
基本的に私はVBAではフォームを使用しないため、別の方法はないかと長いこと悩んでいました。
VBAではCheckBoxが10個とか、少し規模が大きくなると一気にコーディングが煩雑で難しくなります。
本当はVBのようにコントロール配列が使えれば苦労はないのですが、
VBAでは何故かコントロール配列が使えないのですから・・・




OS:Windows 7 x64 Ultimate Edition
環境:Microsoft Office 2000, 2003 SP3

<ワークシート上のコントロールの一覧を取得して操作する>
下記コードでワークシート上のコントロールを全て取得、必要なものを操作します。

'シートの指定はインデックスを使用することもできます。
'下記の場合、「Sheet1」は操作が必要なシート名に合わせて変更します。
Dim objtmp as object
For Each objtmp in Thisworkbook.Worksheets("Sheet1").OLEObjects
   If objtmp.Name = "CheckBox1" Then
     objtmp.Object.Value = True
   End If

   If objtmp.Name = "TextBox1" Then
     objtmp.Object.Text = "AIUEO"
   End If

   If objtmp.Object.Caption = "Error" Then
     objtmp.Object.Caption = "OK"
   End If
Next

今回の最大のポイントは、取得したobjtmpからは直接操作ができないという点でした。

objtmp.Text = "AIUEO" ⇒ 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。

これを、下記のように書き換えるとすんなり動きます。
objtmp.Object.Text = "AIUEO" ⇒ OK!

これに気づくのに、非常に長い時間がかかってしまいました。
Google先生で検索しても、表題のような検索ワードではなかなか見つけられなかったのです。
ただ、検索文字の候補に上がってくるほど悩んでいる人も多いみたいなので、ここにメモしておきました。

--
ちなみに、オートシェイプに対してはShapesコレクションがあり、
これで似たような形のコードが書けそうになるのですが、
当然シェイプクラスのインターフェイスには操作に必要なメンバが準備されていません。
(というかShapesでも普通にコントロールが列挙されてくることに驚きました)

というか・・Office2007の次は操作を元に戻してくれると良いですね。
いつまで経っても移行できません。

スポンサーサイト
拍手する
↑ポチして頂けると、とても励みになります

ファイル検索ソフト「Everything」が素晴らしい

今日は一日中雨でしたね~おかげでお持ち帰りの仕事達が捗りました。
GWまであと少し!人混みにわざわざ行きたいとは思いませんが、
長期休暇は普段の週末よりはずっと足取りも軽くなるものです。

ところで・・ファイル検索って、Windowsのバージョンが上がるにつれ、
しっくりこなくなっていくのは気のせいでしょうか?

ファイル検索はWindows98の頃が一番分かり易かったような気がします・・
検索専用のUIが存在し、その画面で純粋にファイル名を入力、
時にファイルサイズや更新日、作成日を指定したりと非常に直感的でした。

2000やXPでは専用のUIの代わりにエクスプローラの左側が検索用エリアになり、
Windows7ではとうとう右上の検索ボックスのみになってしまいました。
いつでも検索できるという意味では便利になったのでしょうが、
例えばドライブ全体から検索したい場合とかはわざわざルートディレクトリに移動しなければいけない。
検索中に今どのディレクトリを探しているのか表示される場所がない。
インデックスサービスが導入されてからインデックスの構築に時間と負荷がかかりますし、
あれっていまいち・・何故か、全てのディレクトリを指定しているはずなのに
見つからないシステムファイルとかがある(これは設定が悪い?)。
いずれにしても、検索した後、そのフォルダが検索結果画面になるので作業によっては
検索結果を消さずに以前のフォルダをわざわざ開き直したりする必要があって不便です。

そこで何かいいものは無いものかとファイル検索ソフトを探していたら、
とても性能の良いフリーソフトを見つけました。

〇voidtools(David Carpenter)
・Everyting Ver. 1.2.1.371

EverythingMainWindow.jpg
このソフト、凄いですよ。

・インデックスを作るのに数十GBのハードディスクでも数秒でOK
・検索結果の表示が一瞬

・検索結果ウインドウは所謂エクスプローラと同等(ダブルクリック→関連プログラムで開きます)

この使用感には、本当に感動を覚えました。シンプルなインターフェイスもGoodです。
一方で気をつけるポイントは・・

・検索条件はファイル名のみ(ファイルパス、更新日などは使用不可)
・ファイルの中身検索は不可
・ネットワークドライブの検索は不可
・ファイルシステムはNTFSのみ

これら特徴から、ピンとくるものが有りました。
おそらく、このソフトはマスターファイルテーブル(MFT)をダイレクトに見ているのかな、と。
FAQを眺めているとやはり

5.1 Everything requests for administrator privileges in Windows Vista SP1

"Everything" requires administrator privileges because it needs raw read access to your hard drives.
Click accept to allow "Everything" to continue running.

とあるように、Windowsのシステム経由でファイルを検索しているのではなく、
ハードディスクにダイレクトにアクセスしています。
この方法なら尋常でない高速は頷けますし、ファイルの中身は検索できない、
ネットワークドライブが直接検索できないのも納得です。
なお、ネットワークドライブに対しては対策がとられており、
対象ドライブがあるPCでEverythingを同様に起動し、サーバ機能を有効にすることで
検索ワード、検索結果データのやり取りを可能としています。流石。
なお、検索時に覚えておくとOKなのは下記の通り。

「 」(通常のスペース)でAND
「|」でOR
「!」でNOT
「*」全てを満たすワイルドカード
「?」1文字分

他にも細かい指定ができますが、これで大抵は事足りるのではないでしょうか。
詳しくはFAQの「2.4 How do I use regex?」を参照して下さい。


このソフト、XP以上のOSを使われている方で、Windowsの検索機能に不満がある人にお奨めです。
更新日や作成日を指定できないところは残念ですが、
検索にかかる時間の短さである意味十分カバーできていると言えます。

ダウンロードはこちらのページからです。
「Everything-1.2.1.371.exe (334 KB)」をクリックしてダウンロードしましょう。
次に同じページのLanguagePackageの
「Everything.lng.exe (173 KB)」をクリックしてダウンロードしましょう。
それぞれインストール作業を完了したら、
Everythingを起動(中なら再起動)、Optionから「日本語」を選択すれば日本語表示になります。

私はプログラムをシステム起動時に起動させ、「Windowsキー+Ctrl+F」で検索UIを表示させています。
設定は次のようにしています。
EverythingOptions.jpg

基本的に初期設定でOKですが、システムリソースに余裕があるなら
各ドライブのUSNジャーナルログサイズやアイコンキャッシュは多め、
非アクティブ時のデータベースの開放はせず、ファイル名を監視などの設定を有効にする、と
より一層快適に使えるかもですよ。

拍手する
↑ポチして頂けると、とても励みになります

新年度

4月と言えば、日本では新年度に当たりますね。
学生は進級、進学、就職が。社会人には異動や新予算、新事業計画が・・


昔あれほど長く感じた春休みや夏休みも、
いざ無くなってしまうとその感覚すら忘れてしまうもの。
通勤電車の混み具合や、すれ違う人の変化でそれに気がつく始末です。
あれほどの長い休み、一体何をしていたのか・・今では全く想像できません。


2月3月はあまりに忙しく、4月に入って平常となりましたがやる気の回復に時間がかかってます。
友人や恋人、家族と過ごす時間を心地よいと感じられるうちに、
世間の皆様も、何をするにも息抜きや休息を忘れずに。


今年の桜は例年よりも遅いようで、来週当たりがピークになるのでしょうか。
お花見というと宴会して騒ぐイメージばかりですが、できれば静かにのんびりしたいもの。
綺麗なところほど広く知られて人も多く、難しいものです。


また書きたいことをそろそろ記事にしなければ。
拍手する
↑ポチして頂けると、とても励みになります
Blog Search Form
Access Counter
since 2009/03/22
thank you for coming to my blog...
World Community Grid
参加中。ランク1万台を脱するのはいつの日か・・
カテゴリ
最新記事
・・新着順に5件表示中・・
コメント
月別アーカイブ
RSSリンクの表示
リンク
  1. 無料アクセス解析
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。