VitaBox AD

2023年4月23日 星期日

[Excel VBA]ListView和真偽亂數的應用_Pickup


因應業務需求,簡易做一個pickup的VBA介面程式,供使用者易於操作。

撰寫該程式過程中,個人認為有兩個重點,分別為ListView視窗指令和VBA中的真偽亂數(Randomize and Rnd),一併紀錄,也供分享。

a. ListView
ListView指令源自於VB,因此須借重VB和網路資料進行效果測試,而無法在VBA中的help查詢到完整的指令用法。
對於ListView的顯示設定,可由下列代碼段來設定,其中可利用ColumnHeaders對第一欄位和第二欄位的標頭做名稱、欄位寬度和對齊等等視窗效果定義,利用二八比例,視窗效果即如封面圖。

ListView1.ListItems.Clear               '清空列表
ListView1.ColumnHeaders.Clear           '清空表頭
ListView1.Gridlines = True              '顯示格線
ListView1.View = lvwReport              '報表格式
ListView1.FullRowSelect = True          '可選擇欄位
ListView1.ColumnHeaders.Add 1, , "No.", ListView1.Width * 0.2, lvwColumnLeft '定義第一欄位
ListView1.ColumnHeaders.Add 2, , "Name", ListView1.Width * 0.8, lvwColumnLeft '定義第二欄位

另外,針對pickup程式的需求,在ListView視窗中需條列原姓名的序號,因此分別利用i和k兩個整數變量來定義,其中i代表原名單的序號,k代表pickup record list視窗中的順序,如封面圖和下列代碼段所示。

Dim i as integer
Dim k as integer    
k = ListView1.ListItems.Count + 1
ListView1.ListItems.Add.Text = tep.Range("A" & i).Value
ListView1.ListItems(k).SubItems(1) = TB_express.Text

b. 真偽亂數
加入checkbox作為是否重複挑選的選項,同時用Rnd指令作為隨機抽取,然而以Rnd作為隨機產出有bug, 需要再加上Randomize來改變起始亂數。真偽亂數的認知來自於該篇文章,同時也自行撰寫程式碼來驗證結果,可主動調整數列序號和增刪Randomize,詳情可仔細拜讀該篇文章。

Sub ra()
Dim i As Integer
    For i = 1 To 10
        Randomize
        Cells(i, 1) = Rnd()
    Next i
End Sub



沒有留言:

張貼留言