昨日は、リストボックスから二つ選ぶために、「選択結果が三つ以上にならない」仕様にしてみた。
infoment.hatenablog.com
折角なので、今日は選んだ二つを投票することに挑戦する。
選んだ二つを、どのように「投票」するか。恐らく様々な方法があるのだろうが、今回は以下の作戦を試みた。
- ユーザーフォーム起動時に、投票用フォルダを確認する。
無い場合、フォルダを作成する。 - リストボックスで選択中の項目をファイル名として、フォルダ内にファイルを作成する。
1.フォルダの存在確認
実際の運用では、投票用の端末が複数あって、そこから複数の投票者が等しくアクセスできるよう、ネットワークサーバー上にでも作成するのだろう。今回はテストなので、C:\TEMPに作成してみる。
Option Explicit Dim myList As Variant Dim FSO As FileSystemObject Const VoteFolder As String = "C:\TEMP\投票フォルダ"
フォルダの有無確認を、ユーザーフォーム初期化時に行う。無ければ作成する。
Private Sub UserForm_Initialize() ' シートに記載されたリストから、リストボックスの ' 項目用配列を取得。 myList = Selection ListBox1.List = myList ' 投票ボタンの状態を「無効」にする。 VoteButton.Enabled = False Set FSO = New FileSystemObject ' フォルダの存在確認。 If FSO.FolderExists(VoteFolder) = False Then ' 無い場合は作成する。 FSO.CreateFolder (VoteFolder) End If End Sub
2.選択項目で投票用ファイル作成
今回は投票用紙代わりに、以下のファイルを作成してフォルダに投函する。
選択した食べ物の名前_年月日_時分秒.txt
ファイル名が投票用紙なので、中身は空っぽでOK。
Private Sub VoteButton_Click() Dim i As Long For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then FSO.CreateTextFile VoteFolder & "\" & _ ListBox1.List(i, 0) & "_" & _ Format(Now, "yyyymmdd_hhmmss") & ".txt" End If Next Call UserForm_Initialize End Sub
「うどん.txt」だと、同じファイル名が幾つも出来てしまい、扱いが煩雑になる。そこで取り敢えず、重複しにくいファイル名をということで設定してみた。
結果は以下の通り。
とりあえず、今日はここまで。明日に続きます。
参考まで。