- ベストアンサー
最適なコントロールは??
お世話になっております。 現在、ExcelVBAで、シート上のある情報を、フォーム上のListViewコントロールに移し、時間と共に上から反転(選択状態)となるコーティングをしています。 (例:↓リスト[ListViewコントロール]) 名前1 , 0:05 名前2 , 0:03 名前3 , 0:10 ・・・ ↑この場合、「スタート」ボタンを押すと同時に、5秒経つと「名前1」の行が、さらにそこから3秒経つと「名前2」の行が選択状態になるといった代物です。 ここで例えば「名前2」のListItemと「名前3」のListItemのリストの順番を逆にしようとした場合、選択した瞬間に、今まで選択状態だったものが解けてしまいます。おまけにこのListViewコントロールはセルのバックカラーを変更することもできません。 説明が長くなってしまったのですが、同じようなコントロールで、「FlexGrid」・「DataGrid」・「DataList」等いろいろありますが、セルのバックカラーを自由に変えれるコントロールはありますでしょうか?もしくはこれらのコントロールの使用方法等を記載したサイト等を教えていただけないでしょうか?いろいろ探してはみたのですがなかなか見つかりません。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> PCへのアプリケーションのインストール ListView とか、FlexGrid などは VBA のコントロールではないですよ。 標準コントロール以外を使用すると、ライセンスがどうとか、、環境 によっては VB ランタイムのインストールが必要になったりしますが、 その点は OK ? 代替案としては、、 Office に付属してくるコントロールだと、Microsoft Office Spreadsheet があります。 # これも Microsoft Office Web Components が Office の # インストールオプションで選択されてないといけませんが。。 Userform 上で Excel のワークシート(に良く似たもの)を使うことが できますよ。 ご参考までに。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
私も#1のご意見を見る前にですが、たかがエクセルVBAで ListViewやFlexGridなど使わなければならないのか、と思ってしまいいました。 VBなどで、正面からは表形式オブジェクトが無い環境で補うためにListViewなどを使うのではと思ってました。 折角エクセルを本拠にして処理するなら、シートで同じか似たこと を実現できないのでしょうか。 例えばE列以右は表示しない かつ16行目以下は表示しない、限定した表 行列番号などは非表示 メニュー、ツールバー、タイトルなどは非表示などVBAからなら自由に左右できまることはご存知でしょうが。 そしてエクセルの多彩な書式、条件付書式、入力規則などはもちろん利用できます。 VB慣れ、プログラム慣れして、エクセルそのものの機能の検討は十分ですか?したくない? ーー 一定時間(それも短時間で)何か内容を変えるというのは、文系の仕事では、ニーズが良くつかめない。時々刻々変わるデータの受け取りなどならニーズはありますが。 才気に走りすぎている感じで、それを良いほうに生かしてください。
補足
imogasiさん、お返事ありがとうございました。 ニーズに対しては、No.1さんへの補足説明を見ていただければ・・・と思います。 >ListViewやFlexGridなど使わなければならないのか、と思ってしまいいました。 確かに私もこの件に関しては全く同意見で、機能だけならばExcelのシート上で事は足りてしまいます。 しかし、ユーザサイドの意見で、どうしてもフォームを使用してやりたいというのと、フォームのデザインまで決められてしまっているので、コントロールを使用してやらざるをえない状況なのです。 VB+スプレッドでの実現は可能なのですが、PCへのアプリケーションのインストールはやりたくない等の条件も出されてしまっているため、ExcelVBAでコーティングする羽目になった次第です。 ご理解下さい。
- Nayuta_X
- ベストアンサー率46% (240/511)
< さらにそこから3秒経つと> 目的が、解りません。 あなたから、見れば、テクニックを見せ付けたいのかもしれませんが、 ユーザーから見れば、百害あつて益なしの機能です。 ユーザーから見てどうすれば、楽にデータをinput 出来るのか考え直すべきですね。 また、セルのバックカラーとは、コントロールのセルのバックカラーのことでしょうか?。 もし、そうであれば、下記 コードを参考にして下さい。 Editorから表示⇒プロパティウィンドウで、コントロールのプロパティを確認出来ます。 Private Sub ToggleButton2_Click() '背景を不透明または透明に設定します。 If ToggleButton2.Value = True Then 'TextBox2 の背景を透明にします。 TextBox2.BackStyle = fmBackStyleTransparent Else 'TextBox2 の背景を不透明にします。 TextBox2.BackStyle = fmBackStyleOpaque End If End Sub < コントロールの使用方法等を記載したサイト > Office TANAKA とか VBA 即効テクニックとかで、検索してください。
補足
Nayuta_Xさん、お返事ありがとうございました。 >目的が、解りません。 説明不足ですいません。 目的としては、例えば工場のラインの工程をリスト上に表示して 「工程名、必要時間」 という表示がリストとして出ているとします。 ライン工程はリストの上から順にスタートするとして、VBAでは内部的にループ文でタイマー関数を作っており、時間が"必要時間"分経過した段階で、リスト行を反転させる作りになっております。 スタートを押した段階で、作業者の方たちがたまに画面をみて、「実際にはスタートから○分立ったから、今はこの工程をやってなきゃいけない」というのを、反転個所をみて確認します。(上から順にリストの行が反転されていく。時間と共に複数行反転していく) そこで、自分の作業が送れているか否かの進捗を確認するような感じで使用します。 >あなたから、見れば、テクニックを見せ付けたいのかもしれませんが、 >ユーザーから見れば、百害あつて益なしの機能です。 とんでもございません。 私もプログラム初心者ですので、どんなコントロールが最適なのか検討もつかない段階です。 上記機能だけならListviewで問題なかったのですが、今回質問した理由として、「リスト行の入れ替え」という機能が発生したからです。 リストのある行を選択して、↑↓のボタンを押すと、リストの情報が上下に移動するといったものです。 この「ある行を選択」した瞬間に、上記で予定進捗分選択されたいた行の反転が消えてしまうため、「選択状態の反転」ではなく「行のバックカラーを変える」という部分に着目したのですが、現行で使用しているListviewコントロールは、セルのバックカラー自体を変えることは出来ないようです。 ですので変わりの別のコントロールを探している次第です。 ご理解頂けましたでしょうか? コントロールの使用方法のサイトは一度検索してみます。 ありがとうございました。
お礼
KenKen_SPさん、お返事ありがとうございました。 返事が遅くなり、大変申し訳ございませんでした。 「Microsoft Office Spreadsheet」ですね! 一度調べてみます。 ありがとうございました。