Excel VBA 網路資料蒐集 完整教學:
http://raymondchiendtrt.blogspot.tw/2018/05/vba_72.html
在麻辣家族中有網友問到:
請問有什麼方式可以點選上方,小明的名子,然後接跳到A8位置
點選小王 位置移動到A25 小綠A40 小黑A65
http://forum.twbts.com/thread-20816-1-1.html
因此做了一個範例檔
在此範例檔中,只要按下第三列的某個名子,就會跳到A欄相對應的位置
例如按下C3的Agnes會跳到A14,按下D3的Alice會跳到A17
這個其實只是用worksheet的SelectionChange事件加上find語法就可以達到這個效果
語法:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
If Target.Row = 3 And Target.Column >= 3 And Target.Column <= 5 Then
Set Rng = Range("A5:A46")
Set myFind = Rng.Find(what:=Target.Value, lookat:=xlWhole)
myFind.Select
End If
Application.EnableEvents = True
End Sub
首先要先停止觸發事件的機制,也就是
Application.EnableEvents = False
為什麼呢?
因為如果沒寫這行,那麼當程式執行到myFind.select時
SelectionChange又會被觸發一次,有時一不小心就會造成無窮循環
而在最後面也要加一句
Application.EnableEvents = True
讓事件能夠被觸發,否則以後當所選儲存格又改變時
就不會觸發SelectionChange事件
這邊再補充一下,如果真的不小心忘記在最後加
Application.EnableEvents = True
導致之後的事件無法被觸發時,該怎麼辦呢?
這時我們可以直接將這句語法放入即時視窗,按下Enter就OK了
接下來使用Find語法
用Target(也就是你按下去的那個儲存格)的值,來找出一段範圍內(Range("A5:A46"))一樣的值
這時myFind是符合條件的物件
因此可以直接用myFind.select來選到
myFind的一些常用屬性都可以用區域變數視窗來看到
好久沒用到這兩個好用的語法,趁此機會複習一下
沒有留言:
張貼留言