2013年6月11日 星期二

Microsoft Access 2003 表單 VBA

Reference:
http://support.microsoft.com/kb/135546/zh-tw
http://www.access-programmers.co.uk/forums/showthread.php?t=233343
http://www.baldyweb.com/multiselect.htm
http://www.devhut.net/2010/06/10/ms-access-vba-edit-a-querys-sql-statement/
http://stackoverflow.com/questions/14471679/refresh-requery-combobox-problems
http://www.programmer-club.com.tw/showSameTitleN/vb/414.html

目的:
  • 欄位 多選 (ListBox)
  • 以別的欄位產生下拉選單 (ComboBox)
範例:
客戶購買的資料放在 資料表 dbo_IDLI44_customer_order_price,欄位包含 客戶代號 TC004、品號 TD005、單價 TD011、數量 TD008。
點選 客戶代號 會同步更新 品號 下拉選單內容。

做法:
將 ListBox 改為 多重選取。


多重選取的傳回值是 NULL,必須用 VBA 將選取的資料組合成自己要的格式。
在 客戶代號 ListBox 的 On Click 屬性建立 VBA 程式碼。

Private Sub TC004_Click()
    ' add TC004 selected list
    Me.TD005.RowSource = "select distinct TD005 from dbo_IDLI44_customer_order_price where TC004 in (" & TC004_selected() & ");"
End Sub

Private Function TC004_selected()
    Dim Criteria As String
    Dim ctl As Control
    Dim Itm As Variant
    
    Criteria = "''"
    
    ' Build a list of the selections.
    Set ctl = Me.TC004
    For Each Item In ctl.ItemsSelected
        If Len(Criteria) = 0 Then
            Criteria = "'" & Trim(ctl.ItemData(Item)) & "'"
        Else
            Criteria = Criteria & ",'" & Trim(ctl.ItemData(Item)) & "'"
        End If
    Next Item

    TC004_selected = Criteria
End Function

單價下拉選單的選擇結果會傳回文字,必須用 Val(Me.TD011.Value) 轉為數字,才能夠用 SQL 語法查詢。

沒有留言:

張貼留言