返回列表 上一主題 發帖

[分享] VBA分享-效果蠻類似VLOOKUP查詢,只是可以兩欄互查

回復 1# infoverdad
不錯的分享,另用 Find 方法  分享.
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     Dim wsLists As Worksheet, Rng As Range
  3.     If Target.Count > 1 Then Exit Sub
  4.     Set wsLists = Worksheets("Lists")
  5.     Application.EnableEvents = False
  6.     If Target.Column = 2 Then
  7.         Set Rng = wsLists.Range("A:A").Find(Target, LookAt:=xlWhole, MatchCase:=True)
  8.         With Target.Offset(0, 1)
  9.             If Not Rng Is Nothing Then .Value = Rng.Offset(0, 1).Value Else .Value = ""
  10.         End With
  11.     ElseIf Target.Column = 3 Then
  12.         Set Rng = wsLists.Range("B:B").Find(Target, LookAt:=xlWhole, MatchCase:=True)
  13.         With Target.Offset(0, -1)
  14.             If Not Rng Is Nothing Then .Value = Rng.Offset(0, -1).Value Else .Value = ""
  15.         End With
  16.     End If
  17.     Application.EnableEvents = True
  18. End Sub
複製代碼

TOP

本帖最後由 GBKEE 於 2011-7-19 08:15 編輯

回復 4# Hsieh超版
你的程式更簡潔  
但 Set A = s.Find(Target, lookat:=xlWhole) 之後沒有設下 A Is Nothing 的條件,(這檔案的驗證清單範圍中沒有空白值)

TOP

本帖最後由 GBKEE 於 2011-7-19 08:48 編輯

回復 6# Hsieh超版
我的意思是有驗證清單的儲存格式是允許輸入空白值的,如輸入值是 空白值,
Set A = s.Find(Target, lookat:=xlWhole) 傳回 A Is Nothing
你4樓的程式, 在樓主的檔案會產生錯誤.

TOP

回復 17# yen956
執行Ex看看
  1. Option Explicit
  2. Sub Ex()
  3.     ActiveSheet.[A1:A10] = ""
  4. End Sub
  5. Private Sub Worksheet_Change(ByVal Target As Range)
  6.     'Target 的型態是 Range (它是一個儲存格或儲存格範圍)
  7.     MsgBox Target.Cells.Count
  8. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 21# dryadf
1. 在您find方法內是寫if Target.Count > 1 Then Exit sub
   A: 沒有Target.Count會小於1的,  為避免如下類似如下情況發生.試著 Find方法內 去掉這段看看 if Target.Count > 1 Then Exit sub
  1. Option Explicit
  2. Sub Ex()
  3.     ActiveSheet.[A1:A10] = ""
  4. End Sub
  5. Private Sub Worksheet_Change(ByVal Target As Range)
  6.     Dim E As Range
  7.     For Each E In Target
  8.         MsgBox E.Address
  9.     Next
  10. End Sub
複製代碼
2. 在執行過您上面分享的Ex之後,我試著亂改裡面的程式看有什麼效果。
寫成<1的時候不是該代表我選擇一個以上的儲存格時,就能顯示正常的結果嗎?q
A:是>=1吧,代表我選擇一個以上的儲存格.

3. 您在Ex這段程式中用到了Option Explicit
如A 1 中沒Dim E As Range 系統 會通知你要宣告變數.
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

可是Exit Sub不是指離開這個事件嗎?  這樣整句解釋下來不就是等於選擇至少一個以上的儲存格就離開這個事件?
dryadf 發表於 2014/5/5 01:08

沒錯的
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. 'ByVal 選擇性引數。表示以傳值的方式來傳遞引數。
  3. 'Target : 變數名稱
  4. 'As Range : 型態為 Range物件
  5. ' Range 物件,該物件代表一個儲存格或儲存格範圍
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題