ラベル ユーザーフォーム の投稿を表示しています。 すべての投稿を表示
ラベル ユーザーフォーム の投稿を表示しています。 すべての投稿を表示

VBA リストボックス データを追加する



リストボックスにデータを登録する


エクセルVBAのユーザーフォームのリストボックスに任意のデータを追加する方法です。

関数、メソッドなど
ListBoxコントロールのAddItemメソッドか、RowSourceプロパティかListプロパティを使用します。



1.AddItemメソッド
AddItemはListBox.AddItem 追加する値で記述します。
コード
Private Sub UserForm_Initialize()
    
    ListBox1.AddItem "A"
    ListBox1.AddItem "B"

End Sub



こんな感じで登録されます。


ワークシート上のセルを追加する場合は
Private Sub UserForm_Initialize()
Dim i As Long

    With ListBox1
         For i = 2 To 10
            .AddItem ActiveSheet.Cells(i, 1)
        Next i
    
    End With

End Sub


一列目(=A列)の1~10行目の値がリストに追加されました。

2列以上にする場合は、ColumnCountプロパティを指定し、AddItemした後にListプロパティで編集します。

コード
Private Sub UserForm_Initialize()
Dim i As Long

    With ListBox1
         .ColumnCount = 3
         For i = 2 To 10
             .AddItem ""
             .List(.ListCount - 1, 0) = ActiveSheet.Cells(i, 1)
             .List(.ListCount - 1, 1) = ActiveSheet.Cells(i, 2)
             .List(.ListCount - 1, 2) = ActiveSheet.Cells(i, 3)
        Next i
    
    End With

End Sub



Listプロパティは(行,列)形式で0から始まっています。
(1行目の1列目はList(0,0)、1行目2列目はList(0,1)・・・)


2.RowSourceプロパティ
コード
Private Sub UserForm_Initialize()
Dim r As Long

r = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
    With ListBox1
         .ColumnCount = 3
        .RowSource = "Sheet1!A2:C" & r
    
    End With

End Sub


r>
関連・類似ページ
ListViewコントロールの方が見せ方やイベント、などの勝手がよくて使いやすいのですが、64bit版のofficeだとサポートされていません。
なので、もし64bitのofficeになってしまってリストビュー的なことがやりたい場合はListBoxで戦うしかなさそうです。
Officeは特別な理由が無い限り32bitがいいと思います・・・。(64bitの方が速度などパフォーマンスが向上するという噂もありますが。)

ListViewコントロール

ListViewからItemをエクセルに転記




メソッド構文など
Range = ListItems.Item(番号)

ListViewに表示されているアイテムの文字をExcelにコピーする方法です。

元データ等はこちら ListItems コレクション


ListView.ListItemsのCountプロパティでリスト内のデータ数を取得し、それぞれのリスト行のデータをItemプロパティでSubItem含めてセルに書き込むような感じです。

サンプルコード
Sub LtE()

 Dim i As Long, C As Long
 'ListView内のアイテム数
 C = ListView1.ListItems.Count

'アイテムの1行目~最終行までセルにコピー
For i = 1 To C

 '1列目→(セルi行目,5列目)
 Cells(i, 5) = ListView1.ListItems.Item(i)
 '2列目→(セルi行目,6列目)
 Cells(i, 6) = ListView1.ListItems.Item(i).SubItems(1)
 '3列目→(セルi行目,7列目)
 Cells(i, 7) = ListView1.ListItems.Item(i).SubItems(2)

Next i

End Sub





関連・類似ページ
ListView 使い方
ListView プロパティ
Listitems コレクション

Listitemsコレクションープロパティ、メソッド




コレクション構文など
ListView.ListItems.~~~

ListViewでのListitemsでのプロパティとメソッドの使い方メモです。
リストビュー内で表示されているアイテムを追加、消去また表示されているアイテム数のカウントやアイテムの参照などをやってみます。

リストビューの初期設定等は  こちら(リストビュー プロパティ)



◯メソッド
名前 説明 備考
Add アイテムの追加 サブアイテムもフィールドがあれば必要
Remove レコードの削除 要index
Clear 全レコードの消去
メソッド 一覧

サンプルコード
’リストビューにアイテムを追加
Sub CommandButton1_Click()
 Dim i As Long, WS As Worksheet
 Set WS = Workbooks("VbaT.xlsm").Worksheets("1")

  '2~6行目のセルを追加   
   For i = 2 To 6
     '左からText,SubItems(index…)の順
      With ListView1.ListItems.Add
       .Text = WS.Cells(i, 1)
       .SubItems(1) = WS.Cells(i, 2)
       .SubItems(2) = WS.Cells(i, 3)
      End With
   Next i
End Sub




元のシート



◯プロパティ
名前 説明 備考
Count リストビューに表示されているアイテム数
Item() リストビュー内の行数()のアイテム名
プロパティ一覧


サンプルコード
'リストビュー内のアイテム名と数の表示
Sub CommandButton2_Click()
  'リストビュー内のアイテム数
  MsgBox ListView1.ListItems.Count
  'リストビュー内1行名の表示名称
  MsgBox ListView1.ListItems.Item(1)
End Sub





関連・類似ページ
ListView使い方など
ListView プロパティ一覧

ListView プロパティ一覧



ExcelVBAのユーザーフォーム、ListViewコントロールのプロパティ一覧です。
名前 説明 選択項目 選択内容
AllowColumnReorder マウス操作で列のヘッダーの並べ替え可否 True
False(既定値)

不可
Appearance 外観の設定 cc3D(既定値)
ccFlat
立体的
平面的
Arrange アイコンの並び順
(Viewプロパティの設定が
lvwiconかlvwSmallIconの時のみ)
lvwNone(既定値)
lvwAutoLeft
lvwAutoTop

左寄
上寄
BackColor リストビュー内の背景色 RGB( , , ) (赤・緑・青)の順
BorderStyle 境界線のスタイル
(Appearance=ccFlat)
ccNone
ccFixedSingle
境界線を表示しない
する
Checkboxes リストの左側にチェックボックスを
表示するかしない
True
False(既定値)
する
しない
ControlTipText マウスをリストビュー内においた時に
表示されるテキスト
String
Enabled コントロールの使用可否 True(既定値)
False

不可
FlatScrollBar スクロールバーの表示有無 True
False(既定値)
なし(矢印キーでスクロール可)
あり
Font フォント設定
ForeColor リストビュー内の文字色 RGB( , , ) (赤・緑・青)の順
FullRowSelect リスト選択時に行全体を選択するか True(既定値)
False
する
しない
GridLines 行列グリッド線の表示 True
False(既定値)
する
あり
Height リストビューの高さ 整数
HelpContextID F1キーを押した時に
表示出来る独自のヘルプ
(helpFile)
整数 既定値:0
HideColumnHeaders 1列目ヘッダーの非表示 True
False(既定値)
非表示
表示
HideSelection 他のコントロールにフォーカスを
移動した時の選択状態
True
False(既定値)
解除
解除しない
HotTracking マウスオーバーした際に
ハイライトするかどうか
True
False(既定値)
する
しない
HoverSelection マウスオーバーして数秒止まった際に
アイテムを選択するかどうか
True
False(既定値)
する
しない
LabelEdit アイテム選択時に
ラベル(リストアイテム1列目)編集の可否
lvwAutomatic(既定値)
lvwManual

不可
LabelWrap ラベル(リストアイテム1列目)を
2行以上にして表示する
(Viewプロパティの設定が
lvwiconかlvwSmallIconの時のみ)
True(既定値)
False
する
しない
Left フォーム内での位置 整数
MouseIcon オリジナルマウスアイコン
(MousePointer
=fmMousePointerCustom)
.ico Icon
MousePointer マウスポインタの形 fmMousePointerDefault
fmMousePointerArrow
fmMousePointerCross
fmMousePointerIBeam
fmMousePointerSizeNESW
fmMousePointerSizeNS
fmMousePointerSizeNWSE
fmMousePointerSizeWE
fmMousePointerUpArrow
fmMousePointerHourglass
fmMousePointerNoDrop
fmMousePointerAppStarting
fmMousePointerHelp
fmMousePointerSizeAll
fmMousePointerCustom
標準

十字型
Iの字
矢印
矢印
矢印
矢印
矢印
砂時計
禁止マーク
砂時計

矢印
MultiSelect リストアイテムの複数選択可否 True
False(既定値)

不可
OLEDragMode OLEドラッグモードの選択 ccOLEDragManual(既定値)
ccOLEDragAutomatic
不可
OLEDropMode OLEドロップモードの選択 ccOLEDropNone(既定値)
ccOLEDropManual
不可
Picture 背景画像 - -
PictureAlignment 背景画像の位置 fmPictureAlignmentTopLeft
fmPictureAlignmentTopRight
fmPictureAlignmentCenter
fmPictureAlignmentBottomLeft
fmPictureAlignmentBottomRight
左上
右上
真ん中
左下
右下
Sorted 並び替え方法 True
False(既定値)
アルファベット順
リストに追加された順
SortKey ソートの基準の列番号
SortOrder 並び替え方法
(Sorted=True)
lvwAscending
lvwDescending
昇順
降順
Tabindex TABkeyでフォーカスがくる順番 整数
Tagstop TABkeyでフォーカスするかどうか True
False(既定値)
する
しない
TextBackground リスト内のテキスト部分の背景画像 lvwTransparent(既定値)
lvwOpaque
表示する
表示しない
Top フォームの画面上からの表示位置 整数
View リストビューの表示形式 lvwIcon
lvwSmallIcon
lvwList
lvwReport
アイコン
小さいアイコン
一覧
詳細
Visible 表示 True(既定値)
False
する
しない
Width 幅の長さ 単位:ポイント (フォントと同じ単位)



サンプルコード
'ユーザーフォームを開いた時にリストビューをセットする
Sub UserForm_Initialize()

 With ListView1
    
    .AllowColumnReorder = True
    .BorderStyle = ccFixedSingle
    .OLEDragMode = ccOLEDragAutomatic
    .OLEDropMode = ccOLEDropManual
    .Gridlines = True
    .View = lvwReport
    
    
    'ビューの先頭列の表示
    .ColumnHeaders.Add 1, "C", "コード", 50
    .ColumnHeaders.Add 2, "P", "市場", 40
    .ColumnHeaders.Add 3, "N", "社名", 150
 End With

End Sub

.ColumnHeadersコレクションのAddメソッドは左からIndex,Key,Text,Widthでインデックス、独自キー、表示する文字、横幅を指定しています。




イベント一覧やエラー対処などはこちらを参考にしてください
関連・類似ページ
ListView使い方

Listitemsコレクション

ListViewコントロールの使い方、イベント一覧、エラー



ユーザーフォームのListViewコントロールについて(設定方法、用語、イベント、エラー)です。

・設定(VBE)
「その他のコントロール」にある[Microsoft ListView Control]にチェックを入れます。(「その他のコントロール」はツールバー→ツール→で辿るとあります。 ツールボックスをアクティブにした状態だとクリック出来ます。もしくはツールボックス上で右クリック)

チェックを入れるとツールボックス上にListViewのアイコンが表示されるのでそれをクリックしてフォーム内に描きます。


・ListViewプロパティ一覧はこちら


・用語等
◯アイテム(item)
ListViewに表示されているレコードのValue(左端)
◯ラベル(label)
アイテムのテキスト部分
◯OLE(Object Linking and Embedding)
アプリケーション間でのデータ共有


・イベント一覧
名前 説明
AfterLabelEdit ユーザーがラベルの値を変更した後
AfterUpdate どの更新が対応するのかわかりません…
BeforeLabelEdit ユーザーがラベルの値を変更しようとした時
BeforeUpdate どの更新が対応するのかわかりません…
Click ListView内をクリックした時
アイテムがあれば ItemClick と同じ
ColumnClick ListViewの列ヘッダーをクリックした時
DblClick ListView内をダブルクリックした時
アイテムがあればアイテムダブルクリックと同じ
Enter フォーカスがListViewに移った時
Exit フォーカスがListViewから移った時
ItemCheck ListView内のチェックボックスがにチェックが入った時
※ListViewのCheckBoxesプロパティがTrueの時のみ
ItemClick ListView内のアイテムをクリックした時
KeyDown ListViewフォーカス時にキーボードの何かキーが押された時
KeyPress ListViewフォーカス時にキーボードの文字キーが押された時
KeyUp ListViewフォーカス時に既に押されたキーが離れた時
MouseDown ListView上でMouseクリックした時
MouseMove ListView上でMouseを動かした時
MouseUp ListView上でクリックしたMouseを話した時
OLECompleteDrag OLEドラッグが完了した時
※OLEDropModeプロパティ=ccOLEDropManual時
OLEDragDrop ListView内にOLEドロップがされた時
※OLEDropModeプロパティ=ccOLEDropManual時
OLEDragOver ListView内にDrag状態でカーソルが通過した時
OLEGiveFeedback ListView内ItemをDragした時(OLEDragOverの後)
OLESetData ListView外にOLEドラッグが完了した前
OLEStartDrag (OLEDrag メソッド実行時)
ListView内ItemをDragした時


・エラー
◯「実行時エラー '35602' Key is not unique in collection」


→対処方法
一度ColumnHeaders.Add で定義した上で更に別のタイミングで.ColumnHeaders.Add をしようとした場合に起きるエラーで、一旦ListViewをClearにすればエラーはおきないはずです。
◎回避例

ListView1.ColumnHeaders.Clear



◯「はこのマシンでは利用できない為、オブジェクトを読み込めませんでした。」
→多分ですが…
ListViewを作成した環境の「MSCOMCTL.OCX」のバージョンが異なる時に発生するエラーで、ListViewコントロール設定(VBAを作成した環境)した「MSCOMCTL.OCX」のバージョンより古いバージョンの環境時にListViewを読み込んだ時に発生するようです。
Windowsのアップデートをしていなかったりするとバージョンが違うようです。

→対処方法
1.ユーザーのwindows updateを行う。
2.MSCOMCTL.OCXのレジストリ再登録する。
(管理者権限でコマンドプロンプトを開いて regsvr32 C:\Windows\System32\MSCOMCTL.OCXと入力する。)
3.新しいバージョンの「MSCOMCTL.OCX」を C:\Windows\System32\ に上書きする。
(管理者権限でコマンドプロンプトを開いて regsvr32 C:\Windows\System32\MSCOMCTL.OCXが必要かもしれないです。)

1.2,3のどちらかでうまくいきました。(実績環境はxp 32bitのみです。)

△.ユーザーのPCでListViewの設定をする。(個々に出来る場合ですが、「MSCOMCTL.OCX」のバージョンが同一のPCには有効だと思います。)

×.開発する環境のMSCOMCTL.OCXを古いバージョンに変える
→ダメでした。
因みにエラーメッセージは
「システムエラーです:&H80040111(-2147221231)Class Factoryは要求されたクラスを提供できません。」
と出たあとに OK ボタンで進むと
「メモリが不足しています。」
と出ました。

UserForm プロパティ一覧



ユーザーフォーム(UserForm)のプロパティ一覧です。

名前 説明 選択項目 選択内容
(オブジェクト名) フォームの名前
BackColor フォームの背景色 RGB( , , ) (赤・緑・青)の順
BorderColor 境界線の色 RGB( , , ) (赤・緑・青)の順
BorderStyle 境界線のスタイル fmBorderStyle
fmBorderStyleSingle
境界線を表示するか
しないか
Caption フォームに表示される
タイトル
String 文字列
Cycle フォームでタブが最後まで
行った時のフォーカスの循環
方法
fmCycleAllForms

FmCycleCurrentForm

次のFrame,MultiPage
に移動する
今いるFrame,MultiPage
の先頭
DrawBuffer フレームを描画する時に
表示しないピクセル数を指定
16,000~1,048,576
の整数
大きな値だとパフォーマンス低下
Enabled 使用可能かどうか True
False
Font - - -
ForeColor - - -
Height フォーム縦の長さ 単位:ポイント (フォントと同じ単位)
HelpContextID F1キーを押した時に
表示出来る独自のヘルプ
(helpFile)
整数 既定値:0
KeepScrollBarsVisible スクロール バーを常に
表示するかどうか
fmScrollBarsNone
fmScrollBarsHorizontal
fmScrollBarsVertical
fmScrollBarsBoth
非表示(既定値)
水平スクロールバー
垂直スクロール バー
両方のスクロールバー
Left フォームの画面左
からの表示位置
Single 既定値:0
(StartUpPositionが
Manualの際適用)
Mouselcon MousePointerを
fmMousePointerCustomに
指定した場合の表示
ICO アイコン
MousePointer マウスポインタの形 fmMousePointerDefault
fmMousePointerArrow
fmMousePointerCross
fmMousePointerIBeam
fmMousePointerSizeNESW
fmMousePointerSizeNS
fmMousePointerSizeNWSE
fmMousePointerSizeWE
fmMousePointerUpArrow
fmMousePointerHourglass
fmMousePointerNoDrop
fmMousePointerAppStarting
fmMousePointerHelp
fmMousePointerSizeAll
fmMousePointerCustom
標準[矢印](既定値)
矢印
十字型
Iの字
矢印[右上左下]
矢印[上下]
矢印[左上右下]
矢印[左右]
矢印[上]
砂時計
禁止マーク
標準矢印+砂時計
?マーク
矢印[十字]
Mouselconプロパティ
Picture フォームの背景画像 - -
PictureAlignment フォーム背景画像の位置 fmPictureAlignmentTopLeft
fmPictureAlignmentTopRight
fmPictureAlignmentCenter
fmPictureAlignmentBottomLeft
fmPictureAlignmentBottomRight
左上
右上
真ん中
左下
右下
PictureSizeMode フォーム背景画像の表示方法 fmPictureSizeModeClip
fmPictureSizeModeStretch
fmPictureSizeModeZoom
画像サイズのまま
フォームの形に合わせる
形を崩さずに引き伸ばす
PictureTiling フォームに背景画像を
並べるかどうか
True
False
並べる
並べない(既定値)
RightToLeft Captionの位置 True
False

左(既定値)
ScrollBars スクロール表示の有無
・場所
fmScrollBarsNone
fmScrollBarsHorizontal
fmScrollBarsVertical
fmScrollBarsBoth
非表示(既定値)
水平スクロールバー
垂直スクロール バー
両方のスクロールバー
ScrollHeight スクロールバー縦の長さ 単位:ポイント (フォントと同じ単位)
ScrollLeft - - -
ScrollTop - - -
ScrollWidth スクロールバー横の長さ 単位:ポイント (フォントと同じ単位)
ShowModal フォーム表示時の
Worksheet操作
True
False
可能(既定値)
不可能
SpecialEffect フォームの表示エフェクト fmSpecialEffectFlat
fmSpecialEffectRaised
fmSpecialEffectSunken
fmSpecialEffectEtched
fmSpecialEffectBump
平面

凹(既定値)
枠線あり
枠(立体っぽい)
StartUpPosition フォームの初期表示位置 Manual
CenterOwner
CenterScreen
Windows Default
手動
アクティブの中央
画面中央
画面左上
Tag 補足的な情報を設定 String 変数として使用可能
Top フォームの画面上
からの表示位置
Single 既定値:0
(StartUpPositionが
Manualの際適用)
WhatsThisButton タイトルバーに
?ボタン表示
True
False
表示
非表示(既定)
WhatsThisHelp ヘルプの種類 True

False

?ボタンを押して
WhatsThisHelpIDに従う
F1キーを押して
HelpContextIDに従う(既定)
Width フォームの幅 単位:ポイント (フォントと同じ単位)
Zoom フォーム内の拡大縮小率 10~400 -
プロパティ一覧

UserForm イベント一覧



ユーザーに任意で値を入れてもらったり、選択してもらったり処理を実行するタイミングを決めてもらったりすることができます。
フォームを追加するには…
1)画面の上の【挿入】→【ユーザーフォーム】
2)左側のプロジェクトから右クリック【挿入】→【ユーザーフォーム】
3)ショートカットで[Alt] + [I] + [U] 
のいずれかで追加出来ます。


プロパティ一覧 はこちらです。


名前 説明
Initialize フォームが表示される前(初期化された時)
QueryClose フォームが閉じる前
Activate フォームがアクティブになった時
Terminate フォームが閉じられた時
Click フォームがクリックされた時
DblClick フォームがダブルクリックされた時
イベント一覧


サンプル1) 右上の×ボタン禁止
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer) If CloseMode = 0 Then Cancel = True End Sub
引数CloseMode = 0 は右上の×をクリックして閉じようとした動作を意味します。
引数Cancel はフォームを閉じないか どうかで True でキャンセル(=閉じない)します。

ユーザーフォームを表示する Showメソッド



userform.Show
※userformの部分はユーザーフォームのオブジェクト名を指定します

例)ファイルを開いた際にユーザーフォームを自動で表示する
Sub Workbook_Open()
    UserForm1.Show
End Sub

例ではMicrosoftExcelObjectのThisWorkbookに記入しており
Sub Workbook_Open()
としているのでブックを開いたときにフォームが表示されるようになっています。