返回列表 上一主題 發帖

[發問] 請問關於跨工作表vlookup的vba語法

回復 13# e19821223
是期望如此嗎?
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Dim data As Range, Y As Variant
  4.     Application.EnableEvents = False
  5.     If Not Intersect(Target, [A1:A10]) Is Nothing Then
  6.        ' Set data = ['sheet2'!$A$1:B$25]
  7.         'Y = Application.VLookup(Target, data, 2, 0)
  8.         Y = Application.VLookup(Target, ['sheet2'!$A$1:B$25], 2, 0)
  9.         Target.Offset(, 1) = IIf(IsError(Y), "", Y)
  10.      End If
  11.     Application.EnableEvents = True
  12. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 11# GBKEE
我將檔案上傳了 請G大有空過目一下 謝謝

詢問.rar (13.84 KB)

TOP

回復 11# GBKEE
  1. 非常感謝G大的教導
  2. Option Explicit
  3. Private Sub Worksheet_Change(ByVal Target As Range)
  4.     Dim data As Range
  5.    [color=Red] Dim x As Range
  6.     Dim y As Range[/color]
  7.     Application.EnableEvents = False
  8.     If Target.Address(0, 0) = "[color=Red]B1:B10[/color]" Then Exit Sub
  9.     With Range("[color=Red]B1:B10[/color]")
  10.         If Not .Find(What:="#N/A", LookIn:=xlValues) Is Nothing Then .Cells = ""
  11.     End With
  12.     Set data = ['sheet2'!$A$1:B$1000]
  13.     Y = Application.VLookup(X, data, 2, 0)
  14.     Application.EnableEvents = True
  15. End Sub
複製代碼
測試以上的語法 但 好像還是不行 正在尋思 是否哪裡有衝突

TOP

本帖最後由 GBKEE 於 2013-9-20 11:44 編輯

回復 10# e19821223
是這樣嗎?
  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3.     Dim data As Range
  4.     Application.EnableEvents = False
  5.     If Target.Address(0, 0) = "B1" Then Exit Sub
  6.     With Range("C13:C32")
  7.         If Not .Find(What:="#N/A", LookIn:=xlValues) Is Nothing Then .Cells = ""
  8.     End With
  9.     Set data = ['sheet2'!$A$1:B$1000]
  10.     [b1] = Application.VLookup([a1], data, 2, 0)
  11.     Application.EnableEvents = True
  12. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 9# GBKEE
再次謝謝G大
不過 當在A輸入值時 B會出現"#N/A" 的情況(因為找不到值)
小弟我很單純的多加一個IF 語法如下:
  1. If [c13:c32] = "#N/A" Then
  2. [c13:c32] = ""
  3.      
  4. End If
複製代碼
恩..我不是很懂的看了我自己寫的也笑了...好像沒那麼單純..
根本無法執行...

再次請教G大了

TOP

回復 8# e19821223
  1. If Target.Address(0, 0) = "B1" Then Exit Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

感謝O大的指教!
終於止住不運轉了!

不過 當執行此語法後 在B1的部分 就不能手動輸入了
有什麼辦法是可以說依然可以手動輸入呢?
再次麻煩了 非常感謝

TOP

回復 6# e19821223
VBA 說明
  1. EnableEvents 屬性
  2. 請參閱套用至範例特定如果指定物件能觸發事件,則本屬性為 True。讀/寫 Boolean。
複製代碼

WORKSHEET_CHANGE 當使用者或外部連結變更工作表中的儲存格時發生此事件
[b1] = Application.VLookup([a1], data, 2, 0) ,會一直引發此事件.
   
  1. Option Explicit
  2. Private Sub WORKSHEET_CHANGE(ByVal Target As Range)
  3.     Dim data As Range
  4.     Application.EnableEvents = False
  5.     Set data = ['sheet2'!$A$1:B$1000]
  6.     [b1] = Application.VLookup([a1], data, 2, 0)
  7.     Application.EnableEvents = True
  8. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

  1. Private Sub WORKSHEET_CHANGE(ByVal Target As Range)
  2. Dim data As Range
  3. Set data = ['sheet2'!$A$1B$1000]
  4. [b1] = Application.WorksheetFunction.VLookup([a1], data, 2, 0)
  5. End Sub
複製代碼
以上的不能使用...當輸入後電腦變的超級慢 excel整個當掉
不知是否有更好的方式呢 謝謝指教

TOP

感謝O大的回覆 我依照O大所打的 改成
Private Sub WORKSHEET_CHANGE(ByVal Target As Range)
Dim data As Range
Set data = ['sheet2'!$A$1B$10]
[b1] = Application.WorksheetFunction.VLookup([a1], data, 2, 0)
End Sub

可行了
可運作了
但出現了警告標語"堆疊空間不足" 不知道是什麼問題呢
還有 我今天 是用A1 B1
但 我若是想要在A1:A10 ,B1:B10都想要呈現 那 要打10次嗎?
我是非常新的新手..尚在學習 先感謝各位路過的高手的指教

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題