返回列表 上一主題 發帖

[發問] 如何利用VBA對另個檔案的資料庫進行篩選,然後將選出的值存入表格中

[發問] 如何利用VBA對另個檔案的資料庫進行篩選,然後將選出的值存入表格中

個人對VBA較為生疏,但是目前功能函數已無法滿足,故發問前來求助個位VBA專家..
也希望藉此來提升自身VBA的程度,後續也會努力回饋各位的!!!

檔案有兩個
data.xlsx : 資料列表

list.xlsm : VBA的Form與紀錄區域


如果希望list.xlsm的ComboBox針對data.xlsx資料列表進行篩選
(類似自動篩選,彼此關係是連動的,根據範圍的選定後,後面可選的選項會縮小,例如北部/國立/A學校,南部/私立/H學校)
然後最後list.xlsm的三個ComboBox選定後再按輸入資料後,會輸入在list.xlsm的輸入資料欄位內,若上一列有資料則會繼續向下遞補

希望各位可以幫忙一下,感謝各位的協助,謝謝大家.. file.rar (16.42 KB)

回復 1# colinyang

應該是說ComboBox比較像是連動選單,因為沒有要針對原始資料進行篩選,只有下拉式選單要資料連動而已..
不好意思..

TOP

回復 3# lpk187

實際測試,下拉選單與輸入皆無異常,這對我而言真的是一個經典的範例,真的十分的感謝
後續將會再進行分頁的增加再進行測試,好好解析一下程式碼了,若有任何問題會再與您請教
真的是太感謝了!!!

TOP

回復 3# lpk187

Dear lpk187,

如果我的Data工作表再加入一個"學校名單2"

我在List在新增1個ComboBox4來進行切換作業
已在Form Initial的時候addItem進ComboBox4了

結果在SQL語法中利用"&"進行SQL字串與變數連接時,執行時卻造成以下異常,我該如何修正我的語法來達到變更的目的呢...


以下為程式碼,並附上檔案,還請您指教..謝謝
File2.rar (29.22 KB)
  1. Option Explicit
  2. Dim myCon As Object, myRs As Object, SQL$
  3. Private Sub ComboBox1_Click()
  4.     ComboBox2.Clear
  5.     ComboBox3.Clear
  6.     '增加了ComboBox4.Value至 FROM的後面來切換工作表
  7.     SQL = "SELECT 公私立" & _
  8.           " FROM [& ComboBox4.Value &$]" & _
  9.           " Where 區域 Like '" & ComboBox1.Value & "'" & _
  10.           " GROUP BY 公私立;"
  11.     Set myRs = myCon.Execute(SQL)
  12.     ComboBox2.List = Application.Transpose(myRs.GetRows)
  13. End Sub

  14. Private Sub ComboBox2_Click()
  15.     ComboBox3.Clear
  16.     '增加了ComboBox4.Value至 FROM的後面來切換工作表
  17.     SQL = "SELECT 學校" & _
  18.           " FROM [& ComboBox4.Value &$]" & _
  19.           " GROUP BY 學校, [區域] & [公私立]" & _
  20.           " HAVING [區域] & [公私立] Like '" & ComboBox1.Value & ComboBox2.Value & "';"
  21.     Set myRs = myCon.Execute(SQL)
  22.     ComboBox3.List = Application.Transpose(myRs.GetRows)
  23. End Sub

  24. Private Sub CommandButton1_Click() '輸人資料
  25.     Dim ro
  26.     With Sheets("工作表1")
  27.         ro = .Cells(Rows.Count, 2).End(xlUp).Row + 1
  28.         .Cells(ro, 2) = ComboBox1.Value
  29.         .Cells(ro, 3) = ComboBox2.Value
  30.         .Cells(ro, 4) = ComboBox3.Value
  31.     End With
  32.     ComboBox3.Clear
  33.     ComboBox2.Clear
  34.     ComboBox1.Value = ""
  35. End Sub

  36. Private Sub CommandButton2_Click() '離開
  37.     Unload Me
  38. End Sub

  39. Private Sub UserForm_Initialize()
  40.     Set myCon = CreateObject("ADODB.Connection")
  41.     Set myRs = CreateObject("ADODB.Recordset")
  42.     myCon.Open "provider=Microsoft.ACE.OLEDB.12.0;" & _
  43.                "Data Source=" & ThisWorkbook.Path & "\data.xlsx;" & _
  44.                "Extended Properties=""Excel 12.0;HDR=Yes;"";"
  45.     '增加了ComboBox4.Value至 FROM的後面來切換工作表
  46.     SQL = "SELECT 區域" & _
  47.           " FROM [& ComboBox4.Value &$]" & _
  48.           " GROUP BY 區域;"
  49.     Set myRs = myCon.Execute(SQL)
  50.     ComboBox1.List = Application.Transpose(myRs.GetRows)
  51.     Set myRs = Nothing
  52.    
  53. '   加入ComboBox4的Vlaue
  54.     ComboBox4.AddItem "學校名單"
  55.     ComboBox4.AddItem "學校名單2"
  56. '    myCon.Close
  57. '    Set myCon = Nothing
  58. End Sub
複製代碼
Best Regards,
Colin

TOP

回復 6# lpk187
謝謝你,造成您的困擾了...抱歉

TOP

回復 8# Hsieh

謝謝版主,看起來又是另外一種方式來進行選取呢!會好好吸收的!不過在Combobox4選取時會有畫面更新的動作
加入Application.ScreenUpdating = False,可以抑止更新狀況,但是同樣輸入的時候資料不會浮現..必須重新打開檔案才看的到
但是程式碼還是很值得學習,謝謝呢!!!

TOP

各位好..有發現個問題想問了..是關於資料有Null的部分

在轉換時因為會有字串與NULL的問題,所以轉換資料會出現異常

有查詢到SQL可使用CASE進行IS NOT NULL判讀..可是接著在CASE IS NOT NULL "WHEN"的時候
ADODB認不出WHEN的方法..請問該如何將NULL移除呢..謝謝

TOP

        靜思自在 : 成功是優點的發揮,失敗是缺點的累積。
返回列表 上一主題