返回列表 上一主題 發帖

[發問] 下拉式選單撈取資料

回復 1# v03586
我是應用 Find() 來做出這一範例, 不過
我倒希望看看使用 VLookup 如何達成。

分類表.rar (33.33 KB)

TOP

回復 1# v03586
  1. ThisWorkbook:
  2. Option Explicit

  3. Private Sub Workbook_Open()
  4.     Dim rng As Range, cts As Integer
  5.     Dim sh As Worksheet, dic As Object
  6.     Dim m As Variant
  7.    
  8.     Set dic = CreateObject("scripting.dictionary")

  9.     Set sh = Sheets("資料庫")
  10.     With Sheets("範例測試")
  11.         With .ComboBox1
  12.             .Clear
  13.             '  .Value = ""
  14.             .ColumnCount = 1
  15.             .ColumnWidths = "80"
  16.             .ColumnHeads = False
  17.             
  18.             For Each rng In Range(sh.[A2], sh.[A2].End(xlDown))
  19.                 dic(rng.Value) = rng.Value
  20.             Next
  21.             
  22.             m = dic.Items                    ' 字典存入到 m 變數中
  23.             For cts = 0 To UBound(dic.Keys)
  24.                 .AddItem m(cts)
  25.             Next
  26.             .Value = ""                      ' m(0) = "A"
  27.         End With
  28.     End With
  29. End Sub
複製代碼
  1. 工作表3 (範例測試):
  2. Private Sub ComboBox1_Change()
  3.     Dim sh As Range, c As Variant
  4.    
  5.     Sheets("範例測試").[A3:I65535].Clear
  6.     Set sh = Sheets("範例測試").[A3]

  7.     '  這個範例會在第一張工作表上的 A1:A500 範圍內尋找值為 2 的所有儲存格,
  8.     '  並將這些儲存格的值變更為 5。
  9.     With Sheets("資料庫").Range("A2:A" & [A2].End(xlDown).Row)
  10.         Set c = .Find(ComboBox1.Value, LookIn:=xlValues)
  11.         If Not c Is Nothing Then
  12.             firstAddress = c.Address
  13.             Do
  14.                 c.Resize(, 5).Copy sh
  15.                 sh.Offset(0, 8) = c.Offset(0, 6)
  16.                
  17.                 Set sh = sh.Offset(1)
  18.                 Set c = .FindNext(c)
  19.             Loop While Not c Is Nothing And c.Address <> firstAddress
  20.         End If
  21.     End With
  22. End Sub
複製代碼

TOP

        靜思自在 : 人事的艱難與琢磨,就是一種考驗。
返回列表 上一主題