リストボックスから二つだけ選ばせたい ③ 選んだ二つを投票する

昨日は、リストボックスから二つ選ぶために、「選択結果が三つ以上にならない」仕様にしてみた。
infoment.hatenablog.com
折角なので、今日は選んだ二つを投票することに挑戦する。
f:id:Infoment:20190107222044p:plain
選んだ二つを、どのように「投票」するか。恐らく様々な方法があるのだろうが、今回は以下の作戦を試みた。

  1. ユーザーフォーム起動時に、投票用フォルダを確認する。
    無い場合、フォルダを作成する。
  2. リストボックスで選択中の項目をファイル名として、フォルダ内にファイルを作成する。

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」だと、同じファイル名が幾つも出来てしまい、扱いが煩雑になる。そこで取り敢えず、重複しにくいファイル名をということで設定してみた。


結果は以下の通り。
f:id:Infoment:20190107224007g:plain

とりあえず、今日はここまで。明日に続きます。

参考まで。