返回列表 上一主題 發帖

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

回復 18# GBKEE


    感謝GBKEE版大的分享
所以Count就是計算儲存格的數量
可是這樣小弟又多了幾個疑問,不曉得GBKEE版大是否願意解惑

1. 在您find方法內是寫if Target.Count > 1 Then Exit sub
    請問是在什麼情況之下Count才會小於1呢? 這樣寫是為了避免什麼情況發生呢?

2. 在執行過您上面分享的Ex之後,我試著亂改裡面的程式看有什麼效果。
    然後我改成
   Private Sub Worksheet_Change(ByVal Target As Range)

      if  Target.Count < 1 Then

          MsgBox Target.Count
   
      End If

   End Sub
我主要是想試試看修改成您在find方法裡面的用法會有什麼效果
結果我發現<1的時候即便我選擇兩個以上的儲存格也不會執行MsgBox
除非是寫成=1,這樣選擇一個儲存格的時候可以正常的執行MsgBox
如果寫成<=1或>=1的時候,也只有在選擇一個儲存格的時候才能正常執行MsgBox
請問這是為什麼呢?
寫成<1的時候不是該代表我選擇一個以上的儲存格時,就能顯示正常的結果嗎?

3. 您在Ex這段程式中用到了Option Explicit
    我用F1說明查到的是說Option Explicit是用來強制每個變數都一定要宣告
    為什麼您在Ex中要特別加入這一段呢?
    我試著把Option Explicit刪除,也是能夠正常運作,那加入這一段的用意是什麼呢?

小弟魯鈍,希望GBKEE版大能不吝賜教~~~~~謝謝~~

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

回復 22# GBKEE


    感謝GKBEE版大的解答~~
忽然覺得自己好蠢,原來我問問題的方向錯了,因為我完全看錯了。
大概是看太久看到眼都花了,我一直以為您是寫 If Target.Count < 1  @@
所以我才會一直以為是為了避免出現Count小於1的狀況發生,原來根本不可能會有Count<1的情況....
真的是很抱歉~~:P

我之前有試過在find方法中把 If Target.Count > 1 Then Exit Sub拿掉測試,可是偵錯的功能沒有阻止我,整個程式還是執行的很開心,功能也都正常。
所以我才搞不懂那一段到底是什麼意思~~~
反倒是把 Application.EnableEvents = False跟 Application.EnableEvents = true拿掉,整個就開始暴走
我當下手足無措,還好按下Esc就停止了

這樣我就明白了,Count > 1是指至少選擇一個以上的儲存格
如果是這樣的話,您find方法內寫的是 If Target.Count > 1 Then Exit Sub
可是Exit Sub不是指離開這個事件嗎?  這樣整句解釋下來不就是等於選擇至少一個以上的儲存格就離開這個事件?
還是我理解錯誤呢?
想再求解一下~~
以上,再次感謝GBKEE版大肯費心為我解惑~~

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

請問各位高手,在target 的用法  ,是如何使用

TOP

        靜思自在 : 口說好話、心想好意、身行好事。
返回列表 上一主題