質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

5375閲覧

【VBA】複数のListViewコントロールを統一する方法

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2018/12/21 08:21

編集2018/12/21 12:09

お世話になっております。

任意の数(今回は3個)のListViewコントロールを用意し、
・それぞれに入るデータはD&Dで行き来することができる
というフォームを作りたいと考えています。

.ColumnHeaders.Addメソッドに渡したい要素は決まっており、
ListViewが増えても同じ処理をすることになる。

それぞれのListViewオブジェクトに一つずつAddしていくのは冗長なので、
Addする内容はどこかでまとめて
ListViewオブジェクトが生成されたら最初から適用するようにしたい。

  • で、実際なんて書いたらいいの?

というのが本質問です。

D&Dでデータを移動することが出来るListViewコントロールを使ったVBAフォーム

このプロジェクトではListView1~3を用意し、それぞれでColumnHeaders.Addしているため、どう考えても無駄です。

VBA

1Private Sub UserForm_Initialize() 2 3 With ListView1 4 .ColumnHeaders.Add , "Lot", "LOT No.", 40 5 .ColumnHeaders.Add , "Thickness", "THI", 25, lvwColumnRight 6 .ColumnHeaders.Add , "Length", "LENGTH", 45, lvwColumnRight 7 .ColumnHeaders.Add , "Width", "WIDTH", 40, lvwColumnRight 8 '他に幅ゼロで追加される要素が10個程(見る側、操作する側には必要のない項目) 9 '.ColumnHeaders.Add , "○○", "●●", 0, lvwColumnRight 10 11 'とりあえず見た目獲得のために入れてます 12 With .ListItems.Add 13 .Text = "T47-1" 14 .SubItems(1) = 15 15 .SubItems(2) = 2445 16 .SubItems(3) = 1225 17 .SubItems(4) = "L" 18 '..... 19 End With 20 21 With .ListItems.Add 22 .Text = "T47-2" 23 .SubItems(1) = 12 24 .SubItems(2) = 2450 25 .SubItems(3) = 920 26 End With 27 28 With ListView2 29 'ListView1と同じく十数行... 30 End With 31 32 With ListView3 33 'ListView1と同じく十数行... 34 End With 35 36 End With
  • ↑このままではFunctionに書き逃がしてもそのままでしかない

VBA

1.ColumnHeaders.Add , "○○", "●●", 0, lvwColumnRight
  • ↑ListViewを増やしても、これは変わらないのでどこか1箇所で宣言しておきたい

オブジェクト名以外はすべて同じなので共通化したいのですが、具体的にどのような記述、処理をすればいいのでしょうか?

D&Dする処理はまだ考えていません。

クラスモジュールを使った経験もなく、自力ではまだまだ冗長でスパゲッティな関数型コードしか書けないため、質問させて頂きました。

どうかよろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hatena19

2018/12/21 09:57

とりあえず現状の「どう考えても無駄」と思われているコードを提示されては。クラスモジュールを使うことになると思いますので、WEBで「VBA クラスモジュール」を検索して基本を学習しておくと回答がついたとき理解しやすいと思います。
guest

回答1

0

ベストアンサー

ColumnHeaders.Add の処理が各ListViewで共通なので、一か所で記述したいということですね。

下記のようにすればいいでしょう。

vba

1Private Sub UserForm_Initialize() 2 3 Call InitHeader(ListView1) 4 Call InitHeader(ListView2) 5 Call InitHeader(ListView3) 6 7 8End Sub 9 10Private Sub InitHeader(LV As ListView) 11 With LV 12 .ColumnHeaders.Add , "Lot", "LOT No.", 40 13 .ColumnHeaders.Add , "Thickness", "THI", 25, lvwColumnRight 14 .ColumnHeaders.Add , "Length", "LENGTH", 45, lvwColumnRight 15 .ColumnHeaders.Add , "Width", "WIDTH", 40, lvwColumnRight 16 '他に幅ゼロで追加される要素が10個程(見る側、操作する側には必要のない項目) 17 '.ColumnHeaders.Add , "○○", "●●", 0, lvwColumnRight 18 19 End With 20 21End Sub

クラスモジュールを使うほどのことではないですね。

それより、ListView のアイテムをドラッグ&ドロップするのが難しそうです。
ファイルをドラッグ&ドロップで受け取るのは見つかりますが、
アイテムは下記ぐらいしか見つかりませんでした。

VBA - ドラッグ&ドロップによる並べ替えの並べ替え

リストボックスなら見つかりましたが。

投稿2018/12/21 12:40

編集2018/12/21 12:56
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問