【VBA】リストボックスへ値を追加する&選択した値をクリップボードにコピーする
まずはリストボックスへ値を追加
コンボボックスのときとほぼ一緒ですね。コンボボックスのリストに値を追加する
フォームに適当なリストボックスとボタンを作ります。
リストボックスのMultiSelect
プロパティを
2-fmMultiSelectExtended
(複数選択可)にしておきます。
今回はこのデータを追加しました。
(人の名前にしようかと思ってたんだけどなんかお腹すいててパンの名前になっちゃった…)
Private Sub UserForm_Initialize()
lstName.Clear 'リストボックス内初期化
Dim NameCol As Long
NameCol = WorksheetFunction.Match("名前", Master.Rows(1), 0) '名前列数格納
Dim LastRow As Long
LastRow = Master.Cells(Rows.Count, NameCol).End(xlUp).Row '名前列最終行格納
Dim i As Long
For i = 2 To LastRow 'リストボックスに名前をすべて格納
lstName.AddItem Master.Cells(i, NameCol)
Next i
End Sub
選択した値をクリップボードにコピーする
選択した値を変数に格納
リストボックスの値が選択されていたら変数に格納し、改行を入れます。
クリップボードにコピーする
以前、Win7(Office2010)を仕事で使っていたときにNew DataObject
を使った記憶があるのですが
今回やろうと思ったらうまく動作しませんでした
調べると、テキストボックス
を使った書き方が出てきて、
それを使ってみたら正常に動作しました。
「テキストボックスをフォームに作るってこと??」って思ったんですが
メモリ上に作成されたテキストボックスに文言を入れてそれをコピーするということらしいです!
Private Sub btnCopy_Click()
'選択した項目をクリップボードにコピー
Dim i As Long
Dim ListDate As String 'リストボックスで選択した値を格納する変数
For i = 0 To lstName.ListCount - 1 'リストボックスで選択した値を改行しながら変数に格納
If (lstName.Selected(i)) Then
ListDate = ListDate & lstName.List(i) & vbCrLf
End If
Next i
'メモリ上のテキストボックスにListDateを格納する
With CreateObject("Forms.TextBox.1")
.MultiLine = True 'テキストボックスの複数行入力を許可
.Text = ListDate '変数をテキストに格納
.SelStart = 0 'テキストの0文字目以降
.SelLength = .TextLength 'テキストすべてを
.Copy 'クリップボードにコピーする
End With
End Sub
【実行結果】
リストボックスに値が入って選択できました。
コピーボタンを押すとクリップボードにコピーされ
セルやメモ帳などに貼り付けられました。
ワタシ流こだわり
リストボックスを複数選択可能にするとき、MultiSelect
プロパティはいつも、
ctrlで複数選択できる2-fmMultiSelectExtended
です。
1-fmMultiSelectMulti
も複数選択可能ですが選択解除するとき選択したものをもう一度選択しなければなりませんので。
1-fmMultiSelectMulti
を使うのってどんなときなんだろ?
こういう時に使うといいよっていうのあったら教えて下さい
ちなみにワタシはパンよりお米が好きです
Author And Source
この問題について(【VBA】リストボックスへ値を追加する&選択した値をクリップボードにコピーする), 我々は、より多くの情報をここで見つけました https://qiita.com/KaoTechBlog/items/e9543759fabb91706b9f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .